为什么Java的String不能从Comparable接口分配

Mic*_*lec 1 java reflection

JavadocString工具Comparable<String>

但是,以下代码返回false:

String.class.isAssignableFrom(Comparable.class)
Run Code Online (Sandbox Code Playgroud)

如何检查某个类是否实现了给定的接口?

Tun*_*aki 5

你误解了什么isAssignableFrom(cls)在运作.引用Javadoc:

确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口.如果是这样,它返回true; 否则返回false.如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true.否则返回false.

这意味着当你检查时

String.class.isAssignableFrom(Comparable.class)
Run Code Online (Sandbox Code Playgroud)

你实际上在检查这个String班级是否是班级的超级Comparable班级,而不是相反.你应该检查:

Comparable.class.isAssignableFrom(String.class)
Run Code Online (Sandbox Code Playgroud)