Java ArrayList方法中的参数不一致
在ArrayList API中,add()接受泛型参数类型的参数,但包含()和indexOf()接受对象类型的参数Java ArrayList方法中的参数不一致,java,Java,在ArrayList API中,add()接受泛型参数类型的参数,但包含()和indexOf()接受对象类型的参数 public class ArrayList<E> ...{ public boolean add(E e); public boolean contains(Object o); public int indexOf(Object o); .... } 公共类ArrayList{ 公共布尔加法(E); 公共布尔包含(对象o
public class ArrayList<E> ...{
public boolean add(E e);
public boolean contains(Object o);
public int indexOf(Object o);
....
}
公共类ArrayList{
公共布尔加法(E);
公共布尔包含(对象o);
公共int索引of(对象o);
....
}
所以我只是想知道这是与泛型有关还是与一致性设计有关
我查看了Openjdk的实现,但找不到任何具体的原因。API所说的是:
add()
任何不是E
的东西李>
E
(但可以与E
的实例进行比较)的内容public class Main {
public static class Key {
private final int k;
public Key(int k) {
this.k = k;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Key)) {
return false;
}
Key rhs = (Key)obj;
return k == rhs.k;
}
@Override
public int hashCode() {
//...
return 0;
}
}
public static class Data extends Key {
private final int d;
public Data(int k, int d) {
super(k);
this.d = d;
}
}
public static void main(String[] args) {
List<Data> l = new ArrayList<Data>();
l.add(new Data(123, 456));
l.add(new Data(42, 24));
System.out.println(l.contains(new Key(789)));
System.out.println(l.contains(new Key(123)));
System.out.println(l.contains(new Key(42)));
}
}
公共类主{
公共静态类密钥{
私人终审法院;
公钥(INTK){
这个。k=k;
}
@凌驾
公共布尔等于(对象obj){
如果(!(obj键实例)){
返回false;
}
键rhs=(键)obj;
返回k==rhs.k;
}
@凌驾
公共int hashCode(){
//...
返回0;
}
}
公共静态类数据扩展密钥{
非公开期末考试;
公共数据(整数k,整数d){
超级(k);
这个。d=d;
}
}
公共静态void main(字符串[]args){
列表l=新的ArrayList();
l、 增加(新数据(123456));
l、 增加(新数据(42,24));
System.out.println(l.contains(新键(789));
System.out.println(l.contains)(新键(123));
System.out.println(l.contains)(新键(42));
}
}
如果
contains()。例如,您可以有一个列表
和一个编号
,并且能够检查编号
是否在列表
@rai.skumar中:我在答案中添加了一个示例。请参阅