从变量中获取值后调用getter属性
问题描述:
我想调用对象上的getter方法,但要调用的getter方法取决于变量中的值。从变量中获取值后调用getter属性
public void met1(String var) {
MyClass m = new MyClass();
if(var.equals("A"))
m.getA();
if(var.equals("B"))
m.getB();
if(var.equals("C"))
m.getC();
}
这是一种方法。另一个可能会使用switch
,但我不想硬编码值,因为它们可能会改变。有没有更好的方法来做到这一点?
答
字符串是一个类而不是原始类型,你不能使用==
来比较String类的实例,如var,这将无法正常工作!
您需要使用方法equals
如:if(var.equals("A")) then ...
。
除了这种方式是好的。
另一种方法是使用反射不if语句:
Class<?> c = Class.forName("MyClass");
Object my_object = c.newInstance();
Method setNameMethod = my_object.getClass().getMethod("get"+var,String.class);
setNameMethod.invoke(my_object, var);
+0
谢谢,我更新了这个问题。但我觉得硬编码的值不如“A”,“B”,“C”等。 – user3064103
+1
你是什么意思**不习惯硬编码**?如果你正在比较字符串,那么你必须将它存储在某个地方;可能在一些常量变量/枚举上。 –
请解释一下好你的问题,并添加一些其他在你的榜样。 –
@ÓscarAndreu否则会抛出异常。这不是我问题的一部分。我只需要检查是否有更好的方法来实现这一点,而不是检查每个值。 – user3064103