2011-07-28 1 views
1

、 は私がフィールド名が与えられたオブジェクトの特定のフィールドの値を取得する方法はありますか?要するに

MyObject myObject; 

public String getField (String fieldName) { 
return myObject.fieldName; // how could I do this since fieldName is a String? 
} 

背景のような何かをしたい:

は、私は、ストアドプロシージャを使用してデータベースからデータを取得しています。

ストアドプロシージャは、基本的にすべての列を取得します。しかし、私はユーザーがテーブルに表示する列を選択する必要があります。

Hibernateオブジェクトには、ストアドプロシージャによって返される結果セットに対応するすべてのフィールドがあります。

ユーザが望むフィールド(文字列)のリストを使って、フィールド名が与えられたHibernateオブジェクトの対応するフィールドの値を表示する方法はありますか?

+0

私は私がそれを行うことができます知っているが、多くの場合、その後、 -elseステートメントはありますが、そこには洗練されたソリューションがありますか? – Jeremy

+0

フィールド名はクラスの属性名と同じですか?その場合、反射を使用することができます。 – Kaj

答えて

4

あなたはリフレクションを使用してアクセスすることができますあなたの場合は

public static Object getField(Object target, String fieldName) throws Exception { 
    return target.getClass().getDeclaredField(fieldName).get(target); 
} 

を、あなただけ使用したい:

myObject.getClass().getDeclaredField(fieldName).get(myObject); 

をここで少しテストですコード:

static class A { 
    int x = 1; 
} 

public static void main(String[] args) throws Exception { 
    System.out.println(getField(new A(), "x")); 
} 

出力:

1 
0

使用reflection

public String getField (String fieldName, Class clazz , Object o) { 
     Field name = clazz.getField("name"); 
     name.get(o); 
} 
0

アクセサ(ゲッター)メソッドthrogh値にアクセスした方がよい休止状態IMOのために。

私は常にApacheの々BeanUtilsを使用するためのもの(http://commons.apache.org/beanutils/v1.8.3/apidocs/index.html

org.apache.commons.beanutils.BeanUtils.getSimpleProperty(yourEntity,fieldName); 

それとも、使用リフレクションよりもフィールドを使用する場合:

//get the field 
java.lang.reflect.Field field = yourEntity.getClass().getField(fieldName); 
//set it accessible 
boolean oldAccessible = field.isAccessible(); 
try{ 
    field.setAccessible(true); 
    Object value = field.get(yourEntity); 
    return value == null ? "" : value.toString(); 
}finally{ 
    field.setAccessible(oldAccessible) 
}; 
関連する問題