آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

استفاده از یک متغیر از پیش تعریف شده، در یک کلاس (Class) یا یک روش (Method)، هنگامی که متغیر با روش متفاوتی تعریف شده باشد (راه حلی برای خطای Cannot refer to a non-final variable * inside an inner class defined in a different method)، در برنامه نویسی اندروید

حتما تاکنون برایتان پیش آمده است که هنگامی که قصد داشته اید یک متغیر (از هر جنس دلخواه) را در یک کلاس (در واقع شیء ساخته شده از کلاس) یا یک روش (Method) به کار ببرید، با پیام خطای زیر در برنامه Eclipse روبرو شده اید :

در این مواقع نیز معمولا نمی توانیم ماهیت متغیر مورد نظرمان را تغییر بدهیم و همچنین چون نوع ورودی های کلاس (Class) یا روش (Method) نیز قبلا تعریف شده (کلاس ها و روش های استاندارد خود اندروید، مثلا setOnClickListener و CountDownTimer و ...)، نمی توانیم متغیر را به عنوان یک ورودی معمولی به کلاس یا روش مورد نظر ارسال کنیم. بنابراین با یک چالش برای استفاده از آن متغیر در کلاس یا روش مورد نظر، روبرو می شویم.

به عنوان مثال، کد زیر را ببینید (بر اساس آموزش شماره 2610 ) :

در کد بالا، متغیر result از جنس View می باشد و قبل از این کدها، تعریف شده است. با نوشتن کد فوق، با خطای مورد نظر روبرو می شویم (خطا برای متغیر result نمایش داده می شود و ذکر شده که نمی توانیم به آن در این خط از کدها ارجاع بدهیم) :

استفاده از یک متغیر از پیش تعریف شده، در یک کلاس (Class) یا یک روش (Method)، هنگامی که متغیر با روش متفاوتی تعریف شده باشد (راه حلی برای خطای Cannot refer to a non-final variable * inside an inner class defined in a different method)، در برنامه نویسی اندروید
استفاده از یک متغیر از پیش تعریف شده، در یک کلاس (Class) یا یک روش (Method)، هنگامی که متغیر با روش متفاوتی تعریف شده باشد (راه حلی برای خطای Cannot refer to a non-final variable * inside an inner class defined in a different method)، در برنامه نویسی اندروید

راه حلی که می توانیم برای این مواقع به کار ببریم، گسترش (extends) کلاس مورد نظر است و سپس در کلاس جدیدی که بر اساس گسترش آن کلاس قبلی (که یک کلاس استاندارد اندروید است) ساخته ایم، یک ورودی جدید از نوع View هم تعریف می کنیم. یعنی کلاس جدید را به صورت زیر می نویسیم :

مشاهده می کنید که یک ورودی جدید از جنس View اضافه کرده ایم (کلاس استاندارد CountDownTimer خودش تنها دو ورودی دریافت می کند) :

همچنین در کد مورد نظر، این خط نیز مهم است که در آن، یک متغیر از جنس View و با نام myView تعریف کرده ایم که در کل کلاس به کار می رود (مقدار result که به کلاس ارسال می کنیم، در این متغیر ذخیره شده و مورد استفاده قرار می گیرد) :

اکنون تنها کافی است که به جای کد قبلی، این کد را بر اساس کلاس جدید MyCountDownTimer اجرا کنیم (متغیر result را به عنوان ورودی به آن داده ایم) :

بنابراین دیگر با خطای مورد نظر روبرو نخواهیم شد.

اگر نمی دانید که چگونه کلاس های استاندارد اندروید را گسترش (extends) بدهید، بهتر است که به دنبال کدهای نمونه در اینترنت جستجو کنید (اگر کلاس مورد نظر را خودتان نوشته باشید که دیگر به تمامی کدهای آن دسترسی دارید و تغییر ساختار آن ساده است).

نویسنده علیرضا گلمکانی
شماره کلید 3048
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 0 0 0

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)