سلام.چرا گاهی اوقات از final برای cast کردن استفاده می کنیم و چرا گاهی editor ها استفاده از final را اختیاری (دارای چند روش) و گاهی اجباری می دانند؟
Printable View
سلام.چرا گاهی اوقات از final برای cast کردن استفاده می کنیم و چرا گاهی editor ها استفاده از final را اختیاری (دارای چند روش) و گاهی اجباری می دانند؟
سؤالتون واضح نیست. نمونه کد بذارید.
مثلا در کدهای زیر چرا عبارات جلوی 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);
}
}
این بخاطر روش کار بلوک switch...case هست. عبارتی که جلوی case مینویسید همیشه باید یه مقدار ثابت باشه و نه متغیر. توی بخش case، شما میتونید از ثابتهای عددی یا رشتهای و شمارندهها (Enum) استفاده کنید.
پ.ن: اگر ثوابتی که بالای کلاستون تعریف کردید همیشه و به ازای هر نمونه از کلاس ثابته، بهتره علاوه بر final کلمهی کلیدی static رو هم بشون اضافه کنید:
private static final int MENU_ADD = 1, MENU_SEND = 2, MENU_DEL = 3;