2012-12-09 61 views
-4

我有一個名爲Bird的類,它由3個字符串字段組成,每個字段都是不同語言的名稱,如Bird.lang1,Bird.lang2,​​。我有一個叫做allbirds的Bird實例。我可以在Java中動態地引用一個字段類嗎?

現在我要讓字符串ListOfAllBirds所有鳥類的名稱列表,在語言的用戶選擇,存儲在lang變量,其值是lang1lang2lang3之一。而且我需要這樣做數百次(稱這個次數爲N)。

當然,我可以對所有Bird元素執行迭代器,並將相應的字段添加到lang的字段中。但是這意味着在3 x N x Bird.size()(即數十萬!!)條件查詢中測試用戶選擇的語言。

我可以這樣做

varfield = lang.toField(); 
for (Bird birdy : allbirds) 
    ListOfAllBirds.add(birdy.varfield); 

也就是說,我可以用變量的引用到現場?這將節省大量的條件查詢!

謝謝!

+1

難道你不能將字符串存儲在字符串數組中並通過索引訪問它們嗎? – MAV

+0

@MAV:當然。但是,這將如何節省我的資源?這在任何情況下都不意味着在許多操作中? –

+0

@ LuisA.Florit如果你的語言設置是一個對應於正確索引的int,那麼它會很好用。 – Vulcan

回答

1

我的意思是使用字符串數組就像這樣(如果你不想像Vulcan建議的那樣將你的語言設置改爲int)。

String chosenLanguage = "Language 2"; 
int languageIndex = -1; 
switch(chosenLanguage) 
{ 
    case "Language 1": 
     languageIndex = 0; 
     break; 
    case "Language 2": 
     languageIndex = 1; 
     break; 
    case "Language 3": 
     languageIndex = 2; 
     break; 
    default: 
     languageIndex = 0; 
     break; 
} 

for (Bird birdy : allbirds) 
     ListOfAllBirds.add(birdy.names[languageIndex]); 

你的類,那麼應該是這樣的:

class Bird 
{ 
    public String[] names = {"name1", "name2", "name3"}; 
} 

,而不是

class Bird 
{ 
    public String lang1 = "name1"; 
    public String lang2 = "name2"; 
    public String lang3 = "name3"; 
} 

這種方式,你只需要檢查用戶一旦選擇的語言(找到索引),然後你可以遍歷所有的鳥類並根據索引得到正確的名字。

+0

我不明白,對不起,你的代碼裏有什麼樣的對象'names'?即使'names'是一個'int []'我不明白這是如何工作的......你的'names'應該是類似於'ClassField []'的東西,不存在。 –

+0

@ LuisA.Florit更新了我的答案。現在它更合理嗎? – MAV

+0

嗯。 ..我明白你的意思了,會試着實現它,並告知回來。非常感謝!!! –

相關問題