2015-02-10 68 views
2

我有醜陋的代碼段的一部分:如何簡化java代碼片段?

if (name.equals("video")) 
    getString(R.string.video); 
else if (name.equals("music")) 
    getString(R.string.music) 
else if (name.equals("picture")) 
    getString(R.string.picture); 
else if (name.equals("text")) 
    getString(R.string.text); 
else if (name.equals("apk")) 
    getString(R.string.apk); 

是有可能被簡化成類似getString(R.string.#{ name })

+0

顯示更多的代碼。如果您使用的是Java 7,則可以使用switch-case語句。 – barq 2015-02-10 07:42:05

+0

@MarounMaroun對不起,它是java 6,但Java 7可以做到這一點? – roger 2015-02-10 07:42:50

+1

我投票結束這個問題作爲題外話,因爲它是關於codereview,應該問[http://codereview.stackexchange.com/](http://codereview.stackexchange.com/)。 – Jens 2015-02-10 07:48:31

回答

4

可以按名稱獲取標識符:

int id = getResources().getIdentifier(name, "string", getPackageName()); 
String str = getResources().getString(id); 

唯一的問題:

else if (name.equals("text")) 
    getString(R.string.picture); 

你可以得到識別,檢查在此之前做出的if語句。

+0

對不起,那是我的錯誤 – roger 2015-02-10 07:47:07

3

您可以創建一個Map<String, String>填充類似

Map<String, String> MAP = new HashMap<String, String>(); 
MAP.put("video", R.string.video); 
MAP.put("music", R.string.music); 
// ...and so on 

if (MAP.containsKey(name)) { 
    getString(MAP.get(name)); 
} 
1

您可以使用反射API,像這樣的東西

Field f = R.string.getClass().getDeclaredField("text"); 
getString(f.get(String.class));