我正在使用refection来获取类的声明字段。现在我只需要选择那些UI组件,例如JLabel,JFrame等。有没有办法能够确定特定类型是否扩展了java.awt.Compoenent?
我确实设法获得该字段的泛型类型,但我需要的是能够确定该字段是否扩展组件
答案 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()