2015-12-28 34 views
1

Javadoc分配说String实现Comparable<String>为什么Java的字符串不是可比接口

但是,下面的代码返回false

String.class.isAssignableFrom(Comparable.class) 

如何检查是否一些类实现给定的接口?

+0

instanceof将帮助那里 – Stultuske

+0

我有类对象本身不是对象。 –

+3

您应该阅读['isAssignableFrom'](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#isAssignableFrom-java.lang.Class-)的JavaDoc,然后你会知道,你切换了对象和参数。它应该是'Comparable.class.isAssignableFrom(String.class)'。 – Tom

回答

5

你误会了isAssignableFrom(cls)的操作。引述的Javadoc:

判定此Class对象所表示的类或接口或者是相同,或是一个超类或超接口中,通过指定的Class参数所表示的类或接口。如果是的话,它返回true;否则返回false。如果此Class对象表示基本类型,则此方法返回true,如果指定的Class参数恰好是此Class对象;否则返回false。

这意味着,当你正在检查

String.class.isAssignableFrom(Comparable.class) 

你实际上检查是否String类是超一流的Comparable类的,而不是周围的其他方式。您应该检查:

Comparable.class.isAssignableFrom(String.class) 
+0

非常感谢你。 :D尼斯时间:D –

1

您必须反转对象和参数。 代替

String.class.isAssignableFrom(Comparable.class) 

必须使用

Comparable.class.isAssignableFrom(String.class) 

javadoc

确定是否由此类对象所表示的类或接口 或者相同as,或者是a sup er类或超级接口, 类或接口由指定的类参数表示。如果是这样,它将返回true;否则返回false。

相关问题