1

基本的に、すべてのインスタンス変数名とその値を名前と値のペア形式で再帰的に出力する必要があります。私のクラス構造が以下のようになっているとしましょう

public class SomeClass{

private String classDescription;
private Animals animals;
private Birds birds;
private List<Insects> insects;
private Map<String, Reptiles> others;

}

public class Animals{

private Dogs dogs;
private Cats cats;
private List<Mammals> mammalsList;

}

public class Dogs{
private String variable1;
private long variable2;
}

オブジェクト参照のチェーンがある上記のクラス構造では、インスタンス変数名と対応する値を再帰的に出力する必要があります。コードが役立ちます。

4

2 に答える 2

5

このコードが役立つと思います。を処理するための機能を追加していませんMapが、次のように動作しListます:

public static void main(String[] args) throws ClassNotFoundException 
{
    SomeClass s = new SomeClass();
    Class c = s.getClass();
    getMembers(c);
}

public static void getMembers(Class c) throws ClassNotFoundException 
{
    Field[] fields = c.getDeclaredFields();

    for (Field f : fields) 
    {
        if (f.getType().isPrimitive() || f.getType().equals(String.class))
        {
            System.out.println(c.getSimpleName() + ": " + f.getName() + " is a "+ f.getType().getSimpleName());
        }
        else 
        {
            if (Collection.class.isAssignableFrom(f.getType())) 
            {
                String s = f.toGenericString();
                String type = s.split("\\<")[1].split("\\>")[0];
                Class clazz = Class.forName(type);
                System.out.println(c.getSimpleName()+ ": "+ f.getName()+ " is a collection of "+ clazz.getSimpleName());
                getMembers(clazz);
            }
            else
            {
                System.out.println(c.getSimpleName() + ": " + f.getName() + " is a "+ f.getType().getSimpleName());
                getMembers(f.getType());
            }
        }
    }
}

それが役立つことを願っています。

于 2013-05-23T07:12:15.360 に答える
1

リフレクションで名前の値を取得するもう 1 つの簡単な例:

public void getNameValue() {
    try {
        RingtoneManager ringtoneManager = new RingtoneManager(this);
        Field field = RingtoneManager.class.getField("ACTION_RINGTONE_PICKER");
        String type = field.getType().getSimpleName();
        String name = field.getName();
        String value = (String)field.get(ringtoneManager);
        Log.e(TAG,type + " " + name + " = " + value);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2016-08-03T16:15:18.810 に答える