Java Reflect API - isAssignableFrom,Extends / Implements

时间:2016-03-18 00:38:16

标签: java reflection

在Java Reflect API中,在.isAssignableFrom中,类中的方法有其javadocs,如果“此Class对象所代表的类或接口与该类相同,或者是该类的超类或超接口,它将返回true或由指定的Class参数“。

表示的接口

问题是.isAssignableFrom是否会在实现Interface的类中返回true,或者只在使用“extends”时返回true? 换句话说,会发生什么以及为什么会这样:

public class MyClass implements MyInterface{}

MyInterface.isAssignable(MyClass.class) == false/true ?

1 个答案:

答案 0 :(得分:1)

返回true

这是从Javadoc告诉这个的两种方法:

  

此Class对象表示的类或接口与指定的Class参数所表示的类或接口相同,或者是它们的超类或超接口

Java语言规范中的 superinterface 一词是defined,如下所示:

  

类声明中的可选implements子句列出了接口的名称,这些接口是要声明的类的直接超接口。

因此,MyInterfaceMyClass的超接口,因此MyInterface.class.isAssignableFrom(MyClass.class)为真。

另一种说法是javadoc的下一段:

  

具体来说,这个方法测试的是否代表的类型   指定的Class参数可以转换为该类型   由此Class对象通过身份转换表示   或通过扩大参考转换。请参阅 Java语言   规范,第5.1.1和5.1.4节,详情。

匹配,因为

MyInterface i = new MyClass(); 

编译。