2016-10-30 4 views
0

Ich habe diese KlasseWie erhalten Sie den Wert von einem Objekt der Klasse durch einen String?

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 
} 

und die Hauptklasse

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() 
    } 

} 

ich den Wert mit einem String bekommen können, wie zum Beispiel:?

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

Sie könnten ein verwenden ' Zuordnung '. –

+0

@ElliottFrisch Wenn du das nicht antwortest, werde ich es nicht updaten. –

+0

Hinweis: Sie ** ** verwenden ** niemals das $ -Zeichen in Variablennamen. $ ist (per Konvention) nur für * generierten * Code! – GhostCat

Antwort

1

Es scheint, dass Sie wollen "Identifizieren" Objekte durch einen String-basierten Namen. Wenn dies der Fall ist, ist die entsprechende Datenstruktur in Java Map. In Ihrem Fall müssten Sie so etwas wie:

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

Und später können Sie diese

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

mit Query Wenn Sie „willkürlich“ Werte speichern möchten, können Sie/haben eine Map<String, ? extends Object> obwohl verwenden . Aber das ist nicht gerade ein guter Ansatz; Wenn Sie alle Kompilierzeit-Prüfungen verlieren, die Ihnen Generika geben würden.

0

Wenn Sie Java 8 verwenden, können Sie die getValue Methode auf folgende Weise ändern:

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

Beispiel:

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

Ausgang: long: 20, double: 20.0, string: 20, integer: 20

+0

Nur für den Rekord: Ich denke, der OP ist ein echter Java-Neuling. Glaubst du wirklich, er ist in der Lage herauszufinden, was deine Antwort mit seiner Frage zu tun hat? Ich bezweifle das. – GhostCat

+1

Ich bin kein Java-Neuling und ich kann nicht herausfinden, was diese Antwort mit der Frage zu tun hat. –

Verwandte Themen