获取内部类类型名称

时间:2014-04-11 16:29:42

标签: java class inner-classes anonymous-inner-class

我正在尝试获取在类中实例化的类型(这是一个接口)的名称,但我尝试过的可用方法不会返回该类型的实际名称。

示例:

要获得我要做的名字:

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

谢谢!

2 个答案:

答案 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());
    }
}