Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型列表接口_Java - Fatal编程技术网

Java 泛型列表接口

Java 泛型列表接口,java,Java,列表界面如下所示: public interface List<E>{ public boolean add(Object e); public boolean remove(Object e); public boolean contains(Object e); ...etc 向后兼容性 这样,您仍然可以使用java1.5运行java60; } }); System.out.println(“超过60=”+超过60); 这并非总是被推荐的,甚至不是最佳实践。但是这是一个巧妙的

列表界面如下所示:

public interface List<E>{
public boolean add(Object e);
public boolean remove(Object e);
public boolean contains(Object e);
...etc

向后兼容性

这样,您仍然可以使用java1.5运行java<1.5代码

如果你有一些类似这样的遗留代码

List list = //your favorite implementation
list.add(new Car());
list.add(new MandelbrotFractal());

宇宙不会内爆

这是不对的。原型是:

boolean add(E e)
boolean contains(Object o) 
boolean remove(Object o) 

如果正确使用该接口,则永远无法将非E添加到列表中。您仍然可以调用contains并使用非E删除。从技术上讲,该列表允许抛出ClassCastException,但这被标记为可选,我不知道有哪个类这样做。它可能只返回false,列表保持不变。

如果有
数组列表
并将其分配给
列表
。我是否应该询问
列表。包含(“它”)
?如果可以的话,这是非常有用的。

add方法是,因此在这方面,世界上一切都是正确的

和方法将基于
o.equals(e)
进行操作。这允许您使用特殊用途的比较对象(不一定是集合中的对象类型)执行一些棘手的操作

List<Integer> list = Arrays.asList(20, 30, 40, 50, 100);
boolean moreThan60 = list.contains(new Object() {
    public boolean equals(Object rhs) {
        return ((Integer)rhs) > 60;
    }
});
System.out.println("moreThan60 = " + moreThan60);
List List=Arrays.asList(20,30,40,50,100);
布尔值大于60=list.contains(新对象(){
公共布尔等于(对象rhs){
返回((整数)rhs)>60;
}
});
System.out.println(“超过60=”+超过60);

这并非总是被推荐的,甚至不是最佳实践。但是这是一个巧妙的技巧。

那么,您是否因为这个实现而失去了类型安全性?不,您通过泛型获得了类型安全性。但不久前,集合还不是类型安全的。假设这个场景:您有一个遗留项目,在其中添加新功能。对于新特性,您使用最新的Java1.X>5。但是旧的代码库仍然需要运行,这仍然可以很好地编译。但是,将类似的代码(使用正确识别的方法之一)转换为使用泛型会更加困难。因此,对于要使用通配符的情况,参数是“删除”、“添加”和“包含”的对象?添加的参数不是“对象”。这是我在compsci类中讨论的幻灯片的一部分。我想它应该是java api中使用的同一个接口。我真的很确定这不是原因!如果您阅读了API文档,那么这种黑客行为就不能保证有效。
List<Integer> list = Arrays.asList(20, 30, 40, 50, 100);
boolean moreThan60 = list.contains(new Object() {
    public boolean equals(Object rhs) {
        return ((Integer)rhs) > 60;
    }
});
System.out.println("moreThan60 = " + moreThan60);