PDA

View Full Version : سوال: استفاده از final



Hossein8867
چهارشنبه 04 شهریور 1394, 13:40 عصر
سلام.چرا گاهی اوقات از final برای cast کردن استفاده می کنیم و چرا گاهی editor ها استفاده از final را اختیاری (دارای چند روش) و گاهی اجباری می دانند؟

محمد فدوی
چهارشنبه 04 شهریور 1394, 18:58 عصر
سؤالتون واضح نیست. نمونه کد بذارید.

Hossein8867
چهارشنبه 04 شهریور 1394, 19:21 عصر
سؤالتون واضح نیست. نمونه کد بذارید.
مثلا در کدهای زیر چرا عبارات جلوی case ها باید final شده باشند و الا ایراد گرفته میشه؟


package ahmadi.android.app01;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;


public class MyMenuItems2Activity extends Activity {

private final int MENU_ADD = 1, MENU_SEND = 2, MENU_DEL = 3;
private final int GROUP_DEFAULT = 0, GROUP_DEL = 1;
private int counter = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

menu.add(GROUP_DEFAULT, MENU_ADD, 0, "ADD");
menu.add(GROUP_DEFAULT, MENU_SEND, 0, "SHOW");
menu.add(GROUP_DEL, MENU_DEL, 0, "DEL");

return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

if(counter > 0) {
menu.setGroupVisible(GROUP_DEL, true);
}else {
menu.setGroupVisible(GROUP_DEL, false);
}

return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch(item.getItemId()) {
case MENU_ADD:
counter++;
return true;
case MENU_SEND:
Toast.makeText(this, "Counter is now: " + counter, Toast.LENGTH_SHORT).show();
return true;
case MENU_DEL:
counter--;
}

return super.onOptionsItemSelected(item);
}
}

محمد فدوی
چهارشنبه 04 شهریور 1394, 19:32 عصر
این بخاطر روش کار بلوک switch...case هست. عبارتی که جلوی case می‌نویسید همیشه باید یه مقدار ثابت باشه و نه متغیر. توی بخش case، شما می‌تونید از ثابت‌های عددی یا رشته‌ای و شمارنده‌ها (Enum) استفاده کنید.

پ.ن: اگر ثوابتی که بالای کلاستون تعریف کردید همیشه و به ازای هر نمونه از کلاس ثابته، بهتره علاوه بر final کلمه‌ی کلیدی static رو هم بشون اضافه کنید:
private static final int MENU_ADD = 1, MENU_SEND = 2, MENU_DEL = 3;