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

有没有办法知道字段是否扩展了java.awt.Component?,java,swing,reflection,field,Java,Swing,Reflection,Field,我使用refection获取类的声明字段。现在我只需要选择那些UI组件,例如JLabel、JFrame等。有没有办法确定某个特定类型是否扩展了java.awt.component 我确实设法获得了字段的通用类型,但是我需要的是能够确定字段是否扩展了您可以使用的java.awt.component的字段实例。如果您已经在使用反射,则可以使用该组件。这应该可以: <Object instance>.getClass().isAssignableFrom(Component.class);

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


我确实设法获得了字段的通用类型,但是我需要的是能够确定字段是否扩展了您可以使用的java.awt.component的字段实例。如果您已经在使用反射,则可以使用该组件。这应该可以:

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

我已经写了一个例子来说明如何做到这一点。 在下面找到被调查的班级:

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
存在吗?“我猜你是指瞬间?”阿德米班,当然。只是和python混淆了。谢谢