我有这个班级
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();
答案 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