2017-09-20 33 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

你是什麼意思**不習慣硬編碼**?如果你正在比較字符串,那麼你必須將它存儲在某個地方;可能在一些常量變量/枚舉上。 –