2015-02-10 2 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

+0

@MarounMaroun извините, это java 6, но Java 7 может это сделать? – roger

+1

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что речь идет о codereview, и его следует спросить на [http://codereview.stackexchange.com/](http://codereview.stackexchange.com/). – Jens

ответ

4

Вы можете получить идентификатор по имени:

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

Единственная проблема:

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

Вы могли бы сделать, если заявление, прежде чем получить идентификатор, чтобы проверить это.

+0

извините, это моя ошибка – roger

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)); 
Смежные вопросы