J2SE 5.0专题 之 语言特性(二)

2014-11-23 23:22:37 · 作者: · 浏览: 1


public class TestGenerics {

Collection col;

public void doSth(E elem) {

col.add(elem);

// ...

}

}

在泛型的使用中,有一个很容易有的误解,那就是既然Integer是从Object派生出来的,那么ArrayList当然就是ArrayList的子类。真的是这样吗?我们仔细想一想就会发现这样做可能会带来的问题:如果我们可以把ArrayList向上转型为ArrayList,那么在往这个转了型以后的ArrayList中添加对象的时候,我们岂不是可以添加任何类型的对象(因为Object是所有对象的公共父类)?这显然让我们的ArrayList失去了原本的目的。于是Java编译器禁止我们这样做。那既然是这样,ArrayList以及ArrayList、ArrayList等等有没有公共的父类呢?有,那就是ArrayList< >。 在这里叫做通配符。我们为了缩小通配符所指代的范围,通常也需要这样写:ArrayList< extends SomeClass>,这样写的含义是定义这样一个类ArrayList,比方说SomeClass有SomeExtendedClass1和SomeExtendedClass2这两个子类,那么ArrayList< extends SomeClass>就是如下几个类的父类:ArrayList、ArrayList和ArrayList



接下