2

目標:

クラス フィールドと拡張クラス フィールドの値を設定する

例 :

public class CreateRequisitionRO extends AbstractPortfolioSpecificRO {....}

の値を設定できますが、拡張されているCreateRequisitionRO値を設定できません。AbstractPortfolioSpecificRO

これは私が値を設定する方法です:

public Object creatObjectWithDefaultValue(String className) throws IllegalArgumentException, IllegalAccessException, InstantiationException {
        Class<?> objectClass = null;
        Object clsObject =null;
        try {
            objectClass = Class.forName(className);
            clsObject = objectClass.newInstance();
             Field[] fields = objectClass.getDeclaredFields();
             for(Field f:fields){
                  if(!f.isAccessible()){
                        f.setAccessible(true);
                        Class<?> type = f.getType();
                        if(! Modifier.isFinal(f.getModifiers()) && type.equals(Integer.class)){
                            f.set(clsObject, DefaultParamValuesEnum.INTEGER.getDefaultInt());  
                        } else if( !Modifier.isFinal(f.getModifiers()) && type.equals(java.math.BigDecimal.class)){
                            f.set(clsObject, DefaultParamValuesEnum.BIGDECIMAL.getDdefaultBigDecimal());  
                        } else if(! Modifier.isFinal(f.getModifiers()) && type.equals(org.joda.time.LocalDate.class)){
                            f.set(clsObject,DefaultParamValuesEnum.DATE.getDefaultDate());  
                        }  else if(! Modifier.isFinal(f.getModifiers()) && type.equals(boolean.class)){
                            f.set(clsObject, DefaultParamValuesEnum.BOOLEAN.getDefaultBoolean());  
                        } else if(! Modifier.isFinal(f.getModifiers()) && type.equals(java.lang.String.class)){
                            f.set(clsObject, DefaultParamValuesEnum.STRING.getDefaultString());  
                        }
                        else if(! Modifier.isFinal(f.getModifiers()) && type.equals(long.class)){
                            f.set(clsObject,DefaultParamValuesEnum.LONGVALUE.getDefaultLong());  
                        }
                     }
               }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return clsObject;
    }

これは私が上記のメソッドを呼び出す方法です:

classObject.creatJSONObject("com.hexgen.ro.request.CreateRequisitionRO");

上記の方法はCreateRequisitionRO、拡張クラスで使用可能なフィールド以外で使用可能なすべてのフィールドに値を設定します。

設定方法は?

4

4 に答える 4

1

を使用して、クラスのスーパークラスを取得できますClass<SuperClass> superClazz = clazz.getSuperclass();

取得したら、のField[]使用方法superClazz.getFields()と使用set方法を取得しますField

于 2013-04-30T09:01:27.920 に答える
1

メソッドを使用getSuperclass()して、スーパークラスのクラス オブジェクトを取得します。同様に、スーパークラスのフィールドを取得します。

于 2013-04-30T09:01:54.377 に答える
0
obj.getClass().getSuperclass().getDeclaredFields();

上記の関数を使用して同じことを達成できます..

また、 Java でのリフレクションを介したプライベート継承フィールドへのアクセスも確認してください

于 2013-04-30T09:02:30.070 に答える