2011-04-27 91 views
4

我如何能夠中檢索變量的值,它有一個動態名稱動態變量名的Java

例如基於數據庫中,我建立一個變量名我有常量

public class Constant{ 
    public static final String S_R = "Standard(240)"; 
    public static final String S_W = "Standard(180)"; 
    public static final String L_R = "Large(360)"; 
    public static final String L_W = "Large(280)"; 
} 

的列表

String varName = "S" + "_" +"R"; // This can be S_R , S_W , L_R or L_W 
String varVal = // How do i get value of S_R 
+4

你不能這樣做,不想這樣做。您想要一個帶有「S_R」,「S_W」,...的「Map」作爲鍵和相應的值。 – 2011-04-27 14:40:28

回答

9

使用具有變量名稱的普通HashMap作爲字符串與它們的值。或者使用枚舉作爲鍵和值作爲值的EnumMap。 AFAIK,這是使用Java時最接近的。當然,你可以用反射來解決問題,但IMO的地圖方法更合乎邏輯。

1

您可以使用Map<String, String>並通過其鍵找到值。

更妙的是,你可以有一個enum

public enum Foo { 
    S_R("Standard", 240), 
    S_W("Standard", 180),...; 

    private String type; 
    private String duration; 

    // constructor and getters 
} 

然後調用Foo.valueOf(name)

(您也可以通過反射做到這一點 - Constants.class.getField(fieldName),然後調用field.get(null)(空靜態),但是那。不是一個好的方法。)

+0

使用枚舉你的意思是像Constants.Foo.valueOf(「S_R」);我嘗試過,並沒有工作。它返回「S_R」 – 2011-04-27 15:18:59

+0

@ user608576徹底擺脫常量。 Just Foo.valueOf(「S_R」)。它應該返回一個'Foo'對象,您可以在其中調用'getType()'和'getDuration()' – Bozho 2011-04-27 15:27:29

+0

@ user608576:不,它會返回「S_R」(或者至少不是「String」 「S_R」)。它返回枚舉值'S_R',你可以使用適當的getter方法來獲得'type'和/或'duration',你必須添加它。 – 2011-04-28 08:50:38

0

如果你真的必須這樣做(而且不太可能),你將不得不使用Java「反射」API。