[英]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.