在Java Reflect API中,在.isAssignableFrom中,类中的方法有其javadocs,如果“此Class对象所代表的类或接口与该类相同,或者是该类的超类或超接口,它将返回true或由指定的Class参数“。
表示的接口问题是.isAssignableFrom是否会在实现Interface的类中返回true,或者只在使用“extends”时返回true? 换句话说,会发生什么以及为什么会这样:
public class MyClass implements MyInterface{}
MyInterface.isAssignable(MyClass.class) == false/true ?
答案 0 :(得分:1)
返回true
。
这是从Javadoc告诉这个的两种方法:
此Class对象表示的类或接口与指定的Class参数所表示的类或接口相同,或者是它们的超类或超接口
Java语言规范中的 superinterface 一词是defined,如下所示:
类声明中的可选implements子句列出了接口的名称,这些接口是要声明的类的直接超接口。
因此,MyInterface
是MyClass
的超接口,因此MyInterface.class.isAssignableFrom(MyClass.class)
为真。
另一种说法是javadoc的下一段:
具体来说,这个方法测试的是否代表的类型 指定的
Class
参数可以转换为该类型 由此Class
对象通过身份转换表示 或通过扩大参考转换。请参阅 Java语言 规范,第5.1.1和5.1.4节,详情。
匹配,因为
MyInterface i = new MyClass();
编译。