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