0

私は次のコードを持っており、このコードはキャストがハードコーディングされています (Person) オブジェクトはジェネリック型であるため、実行時にリフレクションを使用して取得する方法はありますか? 私はクラスの型を持っておらず、ランタイム中に取得します (多くの異なるクラスになる可能性があります) が、すべてのクラスに同じメソッドsetIdがあります。どうすればよいですか?

List<Object> listClsObj
    for (Object object : listClsObj) {
            ((Person)object).setId(null);
        }

(object.getClass().setId(null); で試してみましたが、構文エラーが発生し、試してみました

Class<?> clazz = object.getClass(); 
(clazz).setId(null);

また、構文エラーが発生します(うまくできなかった可能性があります)、クラスタイプがわからない場合、どのように処理すればよいですか?

4

2 に答える 2

1

次のコードで試すことができます

Class<?> clazz = object.getClass();
                Field field = clazz.getDeclaredField("id");
                field.setAccessible(true);
                field.set(object, null);
于 2013-01-24T13:32:41.833 に答える
1
for(Object curObject : objectsList){
    try {
        Method method = curObject.getClass().getDeclaredMethod("setId", Integer.class); //suppose only one parameter in method
        method.invoke(curObject, 1);
    } catch (Exception e) {
        //no such method exists
    }
}

もちろん、適切なオブジェクト指向設計を使用することをお勧めします。たとえば、エンティティの場合は、主キー設定の基本的な実装でレイヤー スーパータイプ パターンを使用することをお勧めします。

于 2013-01-24T13:30:41.003 に答える