如何通过String从类的Object获取值?

时间:2016-10-30 19:09:25

标签: java 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
}

和主要课程

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

2 个答案:

答案 0 :(得分:1)

您似乎希望"识别"一些基于字符串的名称的对象。如果是这样,Java中的适当数据结构是Map。在你的情况下,你需要像:

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

稍后您可以使用

进行查询
Integer value = registry.get("t1");

如果你想存储&#34;任意&#34;值,您可以/必须使用Map<String, ? extends Object>。但这首先不是一个好方法;因为你放弃了泛型会给你的所有编译时检查。

答案 1 :(得分: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