问题描述
当我致电Set.class.isAssignableFrom(Iterable.class)
时,它将返回false
。
尽管如此,in the docs,java.util.Set
被列为java.lang.Iterable
的子接口。因此,我感到困惑。您甚至可以在一行代码中进行尝试:
System.out.println(Set.class.getName() + " is " + ((Set.class.isAssignableFrom(Iterable.class)) ? "" : "NOT " ) + "assignable from " + Iterable.class.getName());
它打印java.util.Set is NOT assignable from java.lang.Iterable
。
那是为什么?
解决方法
那是因为您使用的isAssignableFrom
错误。
正如the docs所说,isAssignableFrom(Class<?> cls)
“确定此Class对象表示的类或接口是否与指定对象所表示的类或接口相同,或者是该类或接口的超类或超接口。类参数”。因此cls
将是Set.class,完整语法将是:
Iterable.class.isAssignableFrom(Set.class)
。
...实际上返回了true
。