2016-10-30 162 views
0

我有這個類如何通過字符串從類的對象中獲取值?

public class Register{ 
    String name; 
    int value; 
    int lockedValue = 0; 

    Registro(String name){ this.name = name; } 

    public int getValue(){ return value; } 
    // rest of get and set methods 
} 

和主類

public class Simulator{ 

    static Register $t0, $t1, $t2; 

    public static void main(String[] args) throws IOException { 

     $t1 = new Register("$t1"); 
     $t1.setValue(15); 
     $t2 = new Register("$t2"); 
     $t2.setValue(20); 


    // here i can get values by $t1.getValue() 
    } 

} 

我可以用String獲取的價值,就像爲:?

String nameRegister = "$t1"; 
int fetchValue = nameRegister.getValue(); 
+5

你可以使用' Map '。 –

+0

@ElliottFrisch如果你沒有答案,我不會讚揚它。 –

+0

提示:你**從不**在變量名中使用$字符。 $是(按照慣例)僅用於*生成的*代碼! – GhostCat

回答

1

看來要通過一些基於字符串的名稱「識別」對象。如果是這樣,Java中適當的數據結構是Map。在你的情況,你需要這樣的:

Map<String, Integer> registry = new HashMap<>(); 
registry.put("t1", 15); 
registry.put("t2", 20); 

,以後你可以用

Integer value = registry.get("t1"); 

如果你想存儲「任意」值查詢此,你可以/必須使用Map<String, ? extends Object>雖然。但首先這不是一個好方法;因爲你放棄了泛型會給你的所有編譯時檢查。

0

如果您使用的是Java 8中,您可以修改以下方式getValue方法:

public <T> T getValue(Function<Integer, T> parser) { 
     return Optional.of(value).map(parser).get(); 
    } 

例子:

Register $t2 = new Register("$t2"); 
    $t2.setValue(20); 

    //getting values 

    Long longValue = $t2.getValue(Integer::longValue); 
    Double doubleValue = $t2.getValue(Integer::doubleValue); 
    String stringValue = $t2.getValue(i -> i.toString()); 
    Integer integerValue = $t2.getValue(Integer::valueOf); 
    System.out.print("long: " + longValue + ", double: " + doubleValue + ", string: " + stringValue + ", integer: " + integerValue); 

輸出: long: 20, double: 20.0, string: 20, integer: 20

+0

只是爲了記錄:我認爲OP是一個真正的java新手。你真的認爲他能夠確定你的答案與他的問題有關嗎?我,我懷疑這一點。 – GhostCat

+1

我不是一個Java新手,我不知道這個答案與這個問題有什麼關係。 –

相關問題