这里是引用
一. 属性使用类级别的泛型
当类定义了泛型参数时,类中的属性可以直接使用这些泛型:
public class Container<T> {
private T item; // 属性使用类级别的泛型T
public Container(T item) {
this.item = item;
}
}
二. 属性有自己的泛型(独立于类泛型)
属性可以定义自己的泛型,与类的泛型无关:
public class Box<T> {
private List<String> strings; // 属性有自己的具体类型
private <E> void method(E param) { // 方法有自己的泛型
// ...
}
}
三. 混合使用
一个类可以同时有类级别的泛型和属性特有的泛型:
public class Pair<T, U> {
private T first; // 使用类泛型T
private U second; // 使用类泛型U
private List<V> values; // 错误!V未定义
// 正确:方法可以有自己的泛型
public <V> void addValue(V value) {
// ...
}
}
四. 关键区别
-
类泛型:作用于整个类,在实例化类时确定
-
属性泛型:
- 可以使用类泛型(如果属性类型依赖于类泛型)
- 可以是具体类型(如String、Integer)
- 不能单独声明新的泛型(泛型只能在类或方法级别声明)
五. 总结
类中的泛型和属性的泛型可以相同(当属性使用类泛型时),也可以不同(当属性使用具体类型或方法有自己的泛型时)。属性本身不能独立声明新的泛型参数,它只能使用类或方法已声明的泛型参数。