2016-10-30 9 views
0

私はStringで値を取得することができ、このクラスにStringを介してクラスのObjectから値を取得する方法はありますか?

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 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); 

を、後に、あなたは「任意」の値を格納したい場合は、/しかしMap<String, ? extends Object>を使用することができます

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

を使用して、これを照会することができます。しかし、それは最初は良いアプローチではありません。ジェネリックがあなたに与えるコンパイル時のチェックをすべて無駄にするからです。

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の初心者ではありません。私はこの答えが質問と関係していることを理解できません。 –

関連する問題