我正在尝试获取在类中实例化的类型(这是一个接口)的名称,但我尝试过的可用方法不会返回该类型的实际名称。
示例:
要获得我要做的名字:
class Test {
void test(Object o) {
System.out.println(o.getClass());
}
}
以java.lang.Runnable接口为例:
...
test(new Runnable() {});
会打印出class test.Test$2
之类的内容,我在Class类中尝试了其他方法但是只打印出null或test.Test
。我怎样才能从中获得class java.lang.Runnable
?
谢谢!
答案 0 :(得分:1)
对于内部匿名类,您可以执行以下操作:
void test(Object o) {
if(o.getClass().isAnonymousClass()) {
System.out.println(o.getClass().getInterfaces()[0].getName());
} else {
System.out.println(o.getClass().getName());
}
}
答案 1 :(得分:0)
您只需执行instanceof
检查即可完成此操作:
void test(Object o) {
System.out.println(o instanceof Runnable);
}
如果对象实现了Runnable接口,这将打印true
。
如果您想要一个更动态的解决方案(例如,如果您想要打印对象o
的所有接口),您必须执行以下操作:
void test(Object o) {
for (Class i : o.getClass().getInterfaces()) {
System.out.println(i.getName());
}
}