繁体   English   中英

如何从匿名类中获取原始类? Java的

[英]How to get the original class from anonymous class? Java

我不知道如何获得原始的抽象类或定义了匿名内部类的接口。

例如:

public static void main(String[] args) {
    Object obj = new Runnable() {

        @Override
        public void run() {
        }
    };

    System.out.println(obj.getClass());
    System.out.println(obj.getClass().getSuperclass()); //Works for abstract classes only
}

输出:

class my.package.MyClass$1
class java.lang.Object

我如何获得原始课程? (在这种情况下为Runnable.class

谢谢您的帮助! 但是,没有人真正完全回答过我的问题,因此我决定发布我的解决方案:

public static Class<?> getOriginalClass(Object obj) {
    Class<?> cls = obj.getClass();
    if (cls.isAnonymousClass()) {
        return cls.getInterfaces().length == 0 ? cls.getSuperclass() : cls.getInterfaces()[0];
    } else {
        return cls;
    }
}

缩短:

public static Class<?> getOriginalClass(Object obj) {
    Class<?> cls = obj.getClass();
    return cls.isAnonymousClass()
            ? cls.getInterfaces().length == 0 ? cls.getSuperclass() : cls.getInterfaces()[0]
            : cls;
}

您正在做的事情对于获得超类是正确的。 但是Runnable是一个界面,因此它无法正常工作。 检查有关如何获取所有接口的此答案: 获取所有接口

正如其他人提到的那样,runnable是一个接口,因此您不能使用getClass方法获取其名称。 但是,您可以这样做:

System.out.println(obj.getClass().getInterfaces()[0].getName())

注意getInterfaces返回一个数组,因此,如果要实现多个数组,则必须使用for循环遍历该数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM