java - 为什么 JDK Collections.distinct 不强制参数包含相同的元素类型?

标签 java types

该方法的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/

相关文章:

types - 在 F# 中,如何将类型名称作为函数参数传递?

java - 在 JDK6 而不是 7 下编译的相互自引用类型参数?

java - ExpectedException.expectMessage((String) null) 不工作

java - 如何避免 LinearLayout 上的按钮重叠?

C#:标准 .Net 字符串应该存储在 varchar 还是 nvarchar 中?

另一个 header 中的 C++ 结构函数给出 "missing type specifier"

java - 使用 Java 和 Spring 数据在 mongodb 中批量插入仅插入一个文档

java - 如何通过 JAXB 外部绑定(bind)自定义文件设置 @XmlType.namespace

java - 检查类是否是列表的实例

java - 枚举默认方法