2015-05-09 57 views
0

我有一個條件結構與開關在Java中,我有很多情況下,當執行的代碼非常相似。唯一的區別是變量的名稱。 它類似於:Java中如何壓縮開關結構?

switch(n){ 
      case 1: 
       tM=getString(R.string.tM1); 
       tD=getString(R.string.tD1); 
       break; 
      case 2: 
       tM=getString(R.string.tM2); 
       tD=getString(R.string.tD2); 
       break; 

      ... 

      case n: 
       tM=getString(R.string.tMn); 
       tD=getString(R.string.tDn); 
       break; 

      ... 

      case 20: 
       tM=getString(R.string.tM20); 
       tD=getString(R.string.tD20); 
       break; 

      default: 
       tM=""; 
       tD=""; 
       break; 

     } 

代碼太長,這是可能的,我需要與同類結構中添加更多的情況。

那麼,我如何寫這兩行?我搜索這樣的東西:

tM=getString(R.string.tM<n>); 
tD=getString(R.string.tD<n>); 

這怎麼辦?有一些可能的形式? 我嘗試了幾件事,但我沒有找到解決方案。 非常感謝。

+1

不能在XML中聲明一個字符串數組嗎?您也可以使用反射來將字段名稱構建爲字符串。 – Joffrey

+2

如何使用數組而不是一堆編號的變量? (或地圖) – biziclop

+1

添加了android標籤,因爲它引用了'R.string'類的建議,並且因爲答案可能是修改XML資源聲明。 – Joffrey

回答

2

如果n始終引用R.string.tMn和R.string.tDn,則可以使用Java反射。

Field field = R.string.class.getField("tM" + n); 
tM = getString((String)field.get(null)); 

同樣爲tD型

假設getString()方法以一個String作爲PARAM和R.string.tMn是String。如果不是的話,只需將類型轉換爲適合的類型

+0

完美。但getString()需要一個int,我不需要做鑄造謝謝你。 –