2016-09-30 5 views
-3

で与えられた条件を評価するのJavaだから私は3つの部分で構成された文字列をしている文字列形式

fieldName: firstName 
operator: equals 
value: Nikola 

私がしたいですそれを評価することができる、firstName equals Nikola Javaリフレクションの助けを借りて条件として。これは可能ですか? if(obj.getFirstName().equals(value))

編集Xenteros):

問題の説明:
コメント欄での議論によると、私は質問自体にする必要がありますMCVEとの質問に説明を追加することにしました:
複数のフィールドを持つクラスがあり、それらのすべてに文字列が含まれています。フィールド名でフィールド値を取得し、別のフィールドと比較するソリューションのリクエストがあります。String
複数の演算子が使用できます。たとえば、<,<=,>=などですが、残念ながら前に例として追加されたequalsもあります。ユーザーが"equals"をメソッドに渡す場合は、equalsを呼び出す必要があります。

例入力:
User u、その結果u.firstName.equals("John")
"firstName""John"

"<="

予想される出力:

true

+0

私は既に3つのパラメータの値を取得していますが、それらを条件にするだけです – Kei

+0

試したファイルを投稿してください –

+0

これを試したいのは何ですか? –

答えて

1

あなたは反射について尋ねている:

のは、あなたがobjと呼ばれるオブジェクトを持っていると仮定しましょう。

Field field = obj.getClass().getField(fieldName); 
Method method = field.getType().getMethod(operator, Object.class); //in case you mean method 

if (method.invoke(field.get(), value) {} 

スローされる例外の多くの可能性があるとしてtry-catchとそれを囲むように覚えておいてください。

boolean check(Object obj, String fieldName, String operator, String value) throws IllegalArgumentException, someOtherExceptions { 
    Field field = obj.getClass().getField(fieldName); 
    if (operator.equals("equals") { 
     return field.get().equals(value); 
    } 
    if (operator.equals("<=")) { 
     return field.get().compareTo(value) <=0; 
    } 
    if (operator.equals("<")) { 
     return field.get().compareTo(value) < 0; 
    //other operators impl. 
    //at the end: 
    throw new IllegalArgumentException("Unknown operator"); 
} 

代わりのObject objあなたは「フィールド名は」を参照して可能性のあるすべてのフィールドを含むクラスを置く必要があります:私は次のことを示唆質問へのあなたの更新によると

+0

私はそうしなければならないと思います。ご協力いただきありがとうございます。 – Kei

+0

それは方法です。 upvoteと解決策としてマークすることをお気軽に。コメントで説明した内容を追加するために質問を編集します。 – xenteros

+0

@Kei質問を編集して、それがあなたが探しているものかどうか教えてください。 – xenteros

関連する問題