2012-03-28 5 views
0

私はrefectionを使用してクラスの宣言フィールドを取得しています。ここでは、JLabel、JFrameなどのUIコンポーネントであるものだけを選択する必要があります。特定の型がjava.awt.Compoenentを拡張しているかどうかを判断する方法はありますか?私は、フィールドのジェネリック型を取得するために管理しなかったフィールドがjava.awt.Componentを拡張しているかどうかを知る方法はありますか?

は、しかし、私は必要なものフィールドはコンポーネントあなたが使用することができ

+0

は 'instanceof'は十分ではありませんか? – khachik

+0

'isinstance'?私は 'instanceof'を意味すると思いますか? – shift66

+0

@Ademiban、確かに。ちょうどpythonと混同しています。ありがとう。 – khachik

答えて

3

私はこれを行う方法の一例を書きました。調査されているクラスの下 検索:

import javax.swing.JLabel; 
import javax.swing.JTable; 
import javax.swing.JWindow; 

public class Foo { 
    int i; 
    long j; 
    String s; 
    JTable table; 
    JLabel label; 
    JWindow window; 
} 

そして、ここでは、このクラスのフィールドをチェックするコードです:

import java.lang.reflect.Field; 

public class Test { 
    public static void main(String[] args) { 
     new Test().run(); 
} 

private void run() { 
    Class<?> c = Foo.class; 
    System.out.println("The following fields extend Component: "); 
    for (Field f : c.getDeclaredFields()) { 
     Class<?> fieldClass = f.getType(); 
     Class<java.awt.Component> compClass = java.awt.Component.class;  
     if (compClass.isAssignableFrom(fieldClass)) { 
     System.out.println(f.getName()); 
     } 
    } 
} 
} 

出力:

 
The following fields extend Component: 
table 
label 
window 
+0

あなたの助けをたくさんありがとう:) – ict1991

2

yourField instanceofはjava.awt.Componentを

1

あなたはこれが何をすべきClass.isAssignableFrom()を使用することができます。

<Object instance>.getClass().isAssignableFrom(Component.class); 
3

を使用している場合

関連する問題