方法javadoc。
我希望以下代码导致类型错误:
List<String> ls = new ArrayList<>();
List<Integer> li = new ArrayList<>();
boolean result = Collections.disjoint(ls, li);
然而,它不会也将永远回归真实。 为什么会这样呢?
答案 0 :(得分:1)
我没有看到任何奇怪的事。考虑一下在对象之间表达Java中的相等性这一事实,您boolean equals(Object other)
而不是boolean equals(T other)
。
由于equals
确实用于查找两个集合是否不相交(或者在集合情况下为hashCode()
),为什么还需要引发类型错误?
根据这种观点甚至
Set<Integer> set = new HashSet<Integer>();
boolean test = set.contains("foobar");
应被视为错误。
答案 1 :(得分:0)
我不知道决定背后的确切原因。但是,它允许一些非常有用的行为,例如比较一组Foo
和一组Bar extends Foo
的不相交。通配符类型是允许这种情况的方式。
答案 2 :(得分:0)
这是一个更好的问题:为什么会这样?
考虑Foo extends Bar
,Bar extends Jo
,Blo extends Jo
,然后:
List<Jo> jos = new ArrayList<Jo>();
List<Bar> bars = new ArrayList<Bar>();
//populate both lists arbitrarily
Collections.disjoint(jos, bars);
上述调用完全有效,可以返回true
或false
,为什么会阻止此操作?