为什么 java.util.Set 不能从 java.lang.Iterable 分配?

Why is java.util.Set not Assignable From java.lang.Iterable?

当我调用 Set.class.isAssignableFrom(Iterable.class) 时,它 returns 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 或此 Class 对象表示的接口是否与相同,或者是一个超 class 或超接口,class 或由指定的 Class 参数表示的接口”。所以 cls 将是 Set.class,完整的语法将是:

Iterable.class.isAssignableFrom(Set.class).

...这确实是 returns true.