2017-09-20 9 views
-1

オブジェクトのゲッターメソッドを呼び出そうとしていますが、呼び出すゲッターは変数の値によって異なります。変数から値を取得した後にプロパティのゲッターを呼び出す

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

これは一方向です。もう1つはswitchを使用している可能性がありますが、値が変更される可能性があるため、値をハードコードしたくありません。これを行うためのより良い方法はありますか?

+0

が少し良くあなたの問題を説明してください、そしてあなたの例では、他のいくつかを追加します。 –

+0

@ÓscarAndreuは例外をスローします。それは私の質問の一部ではありません。私はちょうど各価値をチェックする代わりにこれを達成するためのより良い方法があるかどうかを確認する必要があります。 – user3064103

答えて

1

文字列はプリミティブ型ではありませんが、==を使用してvarのようなStringクラスのインスタンスを比較することはできません。これは動作しません!

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

**は何を意味しますか?あなたが文字列を比較しているなら、どこかにそれを格納しなければなりません。いくつかの定数変数/列挙型にあるかもしれません。 –

関連する問題