Viv*_*ath 17 java generics collections contains
它是否与旧的(非泛化)版本保持向后兼容Collection?还是有一个我错过的更细微的细节?我看到这个模式在removealso(remove(Object o))中重复,但是add被泛化为add(E e).
new*_*cct 11
contains()取一个Object因为它匹配的对象不一定是你传入的对象的类型contains(); 它只要求它们是平等的.从规范中contains(),contains(o)如果有一个e如此的对象,(o==null ? e==null : o.equals(e))则返回true.请注意,没有任何要求o和e相同的类型.这是因为该equals()方法接受Objectas参数,而不仅仅是与对象相同的类型.
尽管通常equals()可以确定许多类已经定义,以便其对象只能等于其自己的类的对象,但情况肯定并非总是如此.例如,如果List.equals()两个List对象都是Lists并且具有相同的内容,则表示两个对象相等的规范,即使它们是List的不同实现.所以回来的例子在这个问题上,可以有一个Collection<ArrayList>和我打电话给contains()一个LinkedList作为参数,如果存在具有相同内容的列表,它会返回true.如果contains()是通用的并且将其参数类型限制为,则这是不可能的E.
事实上,contains()将任何对象作为参数的事实允许一个有趣的用途,您可以使用它来测试集合中是否存在满足某个属性的对象:
Collection<Integer> integers;
boolean oddNumberExists = integers.contains(new Object() {
public boolean equals(Object e) {
Integer i = (Integer)e;
if (i % 2 != 0) return true;
else return false;
}
});
Run Code Online (Sandbox Code Playgroud)
这里回答.
为什么Java Collections不删除泛型方法?
简而言之,他们希望最大限度地提高向后兼容性,因为在泛型之前很久就会引入集合.
从我这里补充一下:他所指的视频值得关注.
http://www.youtube.com/watch?v=wDN_EYUvUq0
更新
为了澄清,那个说(在视频中)是更新java地图和集合以使用泛型的人之一.如果他不知道,那么谁.
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |