isAssignableFrom,Extends / Implements

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

问题是,如果在实现Interface的类上.isAssignableFrom是否返回true,或者只有在使用“extends”时才返回true? 换句话说,会发生什么情况,以及为何如此:

public class MyClass implements MyInterface{}

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

它返回true

这是Javadoc告诉我们的两种方式:

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

术语superinterface在Java语言规范中定义如下:

类声明中的可选implements实体子句列出了所声明类的直接超接口的接口名称。

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

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

具体来说,此方法测试指定Class参数表示的类型是否可以通过标识转换或通过扩展参考转换转换为此Class对象表示的类型。 有关详细信息,请参阅Java语言规范,第5.1.1和5.1.4节。

这匹配因为

MyInterface i = new MyClass(); 

编译。

链接地址: http://www.djcxy.com/p/57413.html

上一篇: isAssignableFrom, Extends/Implements

下一篇: class.isAssignableFrom() send false when not the same package