该方法的javadoc .
我预计以下代码会导致类型错误:
List<String> ls = new ArrayList<>();
List<Integer> li = new ArrayList<>();
boolean result = Collections.disjoint(ls, li);
但它不会并且始终会返回 true。 为什么它会允许这样做?
最佳答案
我没觉得这有什么奇怪的。考虑一下 Java 中的相等性是在对象之间表达的事实,您有 boolean equals(Object other)
而不是 boolean equals(T other)
。
既然equals
确实用于查找两个集合是否不相交(或者在集合的情况下使用hashCode()
),为什么您需要引发类型错误?
按照这个观点就算
Set<Integer> set = new HashSet<Integer>();
boolean test = set.contains("foobar");
应被视为错误。
关于java - 为什么 JDK Collections.distinct 不强制参数包含相同的元素类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173043/