Oct 19, 2017
Java 泛型-原始类型
原始类型(Raw Type)是指没有类型参数(Type Argument)的泛型类或接口。
要创建一个 Box<T>
的参数化类型,你需要给类型参数 T 赋予一个实际的类型参数:
1 | Box<Integer> intBox = new Box<>(); |
如果实际的类型参数被省略,你就会创建一个 Box<T>
的原始类型:
1 | Box intBox = new Box(); |
因此,Box 是泛型 Box<T>
的原始类型。但是,一个非泛型的类或接口不是原始类型。
由于 JDK 5.0 之前 API 中的很多类(比如集合类)是不支持泛型的,所以原始类型出现在旧有代码中。为了向后兼容,允许将一个参数化类型指向原始类型的:
1 | Box<String> stringBox = new Box<>(); |
但是如果你将一个原始类型指向一个参数化类型就会得到一个警告:
1 | Box rawBox = new Box(); // rawBox 是 `Box<T>` 的原始类型 |
如果你使用原始类型来调用相应泛型中定义的泛型方法,你也会得到一个警告:
1 | Box<String> stringBox = new Box<>(); |
警告表明,原始类型会绕过泛型检查,将不安全代码的捕获推迟到运行时。因此,你应该避免使用原始类型。