不能实例化类型参数
原因:编译器不知道创建那种类型的对象。
public class Generic<T> {
private T obj;
public Generic() {
obj = new T(); // illegal
}
}
对静态成员的限制
静态成员不能使用泛型类的类型参数。
public class Generic<T> {
private static T obj; // illegal
public static T getObj() { // illegal
return obj;
}
}
注意:可以声明静态的泛型方法,这些方法可以定义它们自己的类型参数。
对泛型数组的限制
- 不能实例化元素类型为类型参数的数组。
public class Generic<T extends Number> {
private T[] nums;
public Generic() {
nums = new T[10]; // illegal
}
}
- 不能创建特定类型的泛型引用数组。
Generic<Integer>[] objs = new Generic<Integer>[10]; // illegal
Generic<?>[] objs = new Generic<?>[10]; // OK
对泛型异常的限制
泛型类不能扩展Throwable,这意味着不能创建泛型异常类。
网友评论