2011-10-20 17 views
0

這是我今天的第三個(也是最終的)問題。Java:將變量設置爲類的變量,其中類的名稱是字符串?

是否有可能將變量的值聲明爲類的變量,其中類的名稱是字符串?

int newalpha; 
String color_name = "yellow"; 
Color red = new Color(); 
Color yellow = new Color(); 
Color blue = new Color(); 
newalpha = color_name.alpha 

在這個例子中, 「阿爾法」 是包含的Color類的內部的變量。我想要模擬的部分是「newalpha = color_name.alpha」,因爲顯然「color_name」是一個字符串,而不是顏色。這可能嗎?

謝謝

回答

3

TL; DR回答:沒有。

現實:是的,有點,通過反思,和新聞。

根據您的使用情況,可能有一種方法可以實現您想要的效果,例如通過將顏色存儲在哈希貼圖中,顏色名稱作爲關鍵字,因此您只需說colors.get(colorName).alpha

Map<String, Color> colors = new HashMap<String, Color>() {{ 
    put("red", new Color()); 
    put("yellow", new Color()); 
    put("blue", new Color()); 
}}; 
String colorName = "yellow"; 
int newalpha = colors.get(colorName).alpha; 
+0

它實際上*不可能* - 甚至沒有「排序」 - 在這種情況下,因爲它們是局部變量而不是類成員;-)在任何情況下,考慮擴展示例(使用HashMap或whatnot) 。 – 2011-10-20 00:45:17

+0

@pst哦,是的。便便。 –

+0

錯字與類型參數:地圖 - >地圖<字符串,顏色>;) – oksayt

0

正如其他地方發佈的那樣,您確切問題的答案是「否」。我的補充:「使用更具表現力的語言,比如Lisp,Python,Ruby或者像他們這樣的語言。」

雖然我懷疑你問的是錯誤的問題。你真正想要的是一種獲取任意顏色的alpha值的方法。面向對象的設計倡導者會用這個機會來填充工廠方法,子類型多態,枚舉類型和其他類似的東西。

鑑於我完全,沒有受過教育的遵約你的編碼水平和項目的複雜性,它看起來像一個可接受的解決方法(如果沒有正確的方式)的要簡單得多:

int newAlpha = 0; 
if(colorName.equals("yellow") newAlpha = yellow.getAlpha(); 
else if(colorName.equals("red") newAlpha = red.getAlpha(); 
else if(colorName.equals("blue") newAlpha = blue.getAlpha(); 
else //raise some kind of exception, assert false, or do something else that seems sensible 

(請注意,我稍微改變了幾個名字,以匹配Java的風格)

我不知道發生了什麼事情在Color類(甚至是如何redyellowblue是不同的 - 與他們就當前的代碼是一樣的東西(局部變量名不影響它們引用的對象)),但將if-sequence分解成單獨的方法可能是合適的。和/或使用HashMap這樣的:

HashMap<String, Integer> alphaValues = new HashMap<String, Integer>(); 
alphaValues.put("red", /* something like red.getAlpha() */); 
//etc. 
// ... 
newAlpha = alphaValues.get(colorName); 

我還沒有真正解決的問題的範圍 - 我敢肯定,你自己看着辦吧。

希望有幫助!

編輯:戴夫牛頓擊敗了我對hashmap的一拳 - 他在我創建我的時候編輯了他的帖子。

+0

這在大部分「表達」語言中都不會有任何愛。對於一般意義上的地圖*來說是適當的結構 - 有些語言更好地支持成語(或者好的「案例表達式」)。 – 2011-10-20 05:31:33

相關問題