2015-02-10 47 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));