为什么java.util.Set无法从java.lang.Iterable分配?

问题描述

当我致电Set.class.isAssignableFrom(Iterable.class)时,它将返回false

尽管如此,in the docsjava.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