Hossein8867
چهارشنبه 04 شهریور 1394, 14:40 عصر
سلام.چرا گاهی اوقات از final برای cast کردن استفاده می کنیم و چرا گاهی editor ها استفاده از final را اختیاری (دارای چند روش) و گاهی اجباری می دانند؟
محمد فدوی
چهارشنبه 04 شهریور 1394, 19:58 عصر
سؤالتون واضح نیست. نمونه کد بذارید.
Hossein8867
چهارشنبه 04 شهریور 1394, 20: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, 20:32 عصر
این بخاطر روش کار بلوک switch...case هست. عبارتی که جلوی case مینویسید همیشه باید یه مقدار ثابت باشه و نه متغیر. توی بخش case، شما میتونید از ثابتهای عددی یا رشتهای و شمارندهها (Enum) استفاده کنید.
پ.ن: اگر ثوابتی که بالای کلاستون تعریف کردید همیشه و به ازای هر نمونه از کلاس ثابته، بهتره علاوه بر final کلمهی کلیدی static رو هم بشون اضافه کنید:
private static final int MENU_ADD = 1, MENU_SEND = 2, MENU_DEL = 3;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.