2017-09-20 35 views
-1

我想调用对象上的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,但我不想硬编码值,因为它们可能会改变。有没有更好的方法来做到这一点?

+0

请解释一下好你的问题,并添加一些其他在你的榜样。 –

+0

@ÓscarAndreu否则会抛出异常。这不是我问题的一部分。我只需要检查是否有更好的方法来实现这一点,而不是检查每个值。 – user3064103

回答

1

字符串是一个类而不是原始类型,你不能使用==来比较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

你是什么意思**不习惯硬编码**?如果你正在比较字符串,那么你必须将它存储在某个地方;可能在一些常量变量/枚举上。 –