java方法上的奇怪行为:isAssignableFrom(Class <! - ? - >)

时间:2014-02-24 15:33:08

标签: java

如果您尝试以下代码(我在Java 6上尝试过):

System.out.println(Collection.class.isAssignableFrom(Set.class));

打印出来:false但我打算打印出来:true因为javadoc说:

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.

BUT Collection是Set:public interface Set<E> extends Collection<E>的超类。

那么这种奇怪行为的解释是什么?

1 个答案:

答案 0 :(得分:3)

问题是您要么输入了错误的Collection.class,要么输入了错误的Set.class

请注意,在isAssignableFrom课程中使用Collection方法时存在一些常见的陷阱:我经常注意到人们会混淆参数,因此他们会调用Set.class.isAssignableFrom(Collection.class)而不是调用{{ 1}}。

另一个常常让人头晕目眩的问题与Collection.class.isAssignableFrom(Set.class)有关,不是 a Map.class

希望这有帮助。