泛型教程(二)---源类型

来源:互联网 发布:cet照片采集软件 编辑:程序博客网 时间:2024/06/14 04:20
源类型
源类型是一个名字,一个没有任何类型参数的泛型类或者接口的名字。比如说例子中的泛型类 Box
public class Box<T>{
public void set(T t) { /* ... */}
// ...
}

去创建一个Box<T>的参数化类型(parameterized type),你需要为类型参数(type parameter)T提供一个type argument:
Box<Integer> intBox = new Box<>();

如果type argument被省略了,你就创建了一个Box<T>的源类型:

Box rawBox = new Box()

所以,Box是泛型Box<T>的源类型,但是一个非泛型类或者接口不是一个源类型。

源类型已经被废弃了,因为在JDK 5.0之前,很多API的类都不是泛化的。为了向后兼容,把一个parameterized type 赋值给一个源类型是运允许的。比如:

Box<String> stringBox = new Box<>();
Box rawBox = stringBox; // OK

但是如果把一个源类型赋给一个parameterized type,你会得到警告:

Box rawBox = new Box(); // rawBox is a raw tpe of Box<T>
Box<Integer> intBox = rawBox; // Warning: unchecked conversion

如果你用源类型去调用一个已经泛化的方法(generic methods),这个泛化方法是在相对应的泛型中定义了,也会得到警告:

Box<String> stringBox = new Box<>();
Box rawBox = stringBox;
rawBox.set(8); //warning: unchecked invocation to set(T)

一句话,避免使用源类型


0 0
原创粉丝点击