有没有办法知道一个字段是否扩展java.awt.Component?

时间:2012-03-28 08:06:20

标签: java swing reflection field

我正在使用refection来获取类的声明字段。现在我只需要选择那些UI组件,例如JLabel,JFrame等。有没有办法能够确定特定类型是否扩展了java.awt.Compoenent?

我确实设法获得该字段的泛型类型,但我需要的是能够确定该字段是否扩展组件

5 个答案:

答案 0 :(得分:6)

您可以使用Class#isAssignableFrom

答案 1 :(得分:3)

这应该做:

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

答案 2 :(得分: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

答案 3 :(得分:2)

yourField instanceof java.awt.Component

答案 4 :(得分:1)

如果您已使用反射

,则可以使用Class.isAssignableFrom()