1

このコードを使用して、オブジェクトに関連付けられたすべてのフィールドを取得しています。問題のオブジェクトには 3 つのスーパー クラスがあり、他のクラスはこのオブジェクトから拡張されます。

for (Field f : this.getClass().getFields()){
    try{
        fieldName = f.getName();
        fieldType = f.getType().toString();
        //Do more stuf
    }

スーパークラスに関連付けられたフィールドを取得したくはありませんが、現在のクラスのすべてのフィールドと、そこから拡張されるすべてのフィールドが必要です。

必要なフィールドを除外するにはどうすればよいですか?

4

2 に答える 2

5

スーパークラスに関連付けられたフィールドを取得したくはありませんが、現在のクラスのすべてのフィールドと、そこから拡張されるすべてのフィールドが必要です。

「それから拡張される可能性のあるすべてのもの」を取得することはできませんが、Class.getDeclaredFields()代わりに使用するgetFields()と、そのクラスで宣言されたフィールドのみが取得されます。

于 2012-11-19T23:32:56.443 に答える
4

それぞれについて、フィールドを宣言したクラスを決定するためにField使用できるgetDeclaringClass()ため、次のような階層がある場合

A
|
B
|
C
|\
D E

CDまたはで宣言されたフィールドのみが必要Eな場合は、次のように言うことができます

for (Field f : this.getClass().getFields()){
  if(C.class.isAssignableFrom(f.getDeclaringClass())) {
    // f was declared by C or one of its subclasses

thisのインスタンスの場合はCのパブリック フィールドのみを取得し、 のC場合thisはおよびDのパブリック フィールドを取得します。またはの場合はフィールドをまったく取得しません。CDthisAB

于 2012-11-19T23:38:52.693 に答える