如果您尝试以下代码(我在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>
的超类。
那么这种奇怪行为的解释是什么?
答案 0 :(得分:3)
问题是您要么输入了错误的Collection.class
,要么输入了错误的Set.class
。
请注意,在isAssignableFrom
课程中使用Collection
方法时存在一些常见的陷阱:我经常注意到人们会混淆参数,因此他们会调用Set.class.isAssignableFrom(Collection.class)
而不是调用{{ 1}}。
另一个常常让人头晕目眩的问题与Collection.class.isAssignableFrom(Set.class)
有关,不是 a Map.class
。
希望这有帮助。