9.2.3 并不存在泛型类
9.2.3 并不存在泛型类
前面提到可以把ArrayList<String>
类当成ArrayList
的子类,事实上, ArrayList<String>
类也确实像种特殊的ArrayList
类:该Arraylists<String>
对象只能添加String
对象作为集合元素。但实际上,系统并没有为ArrayList<String>
生成新的class
文件,而且也不会把ArrayList<String>
当成新类来处理。
看下面代码的打印结果是什么?
1 | //分别创建List<String>对象和List<Integer>对象 |
运行上面的代码片段,可能有读者认为应该输出false
,但实际输出true
。因为不管泛型的实际类型参数是什么,它们在运行时总有同样的类(class
)。
静态方法 静态初始化块 静态变量的声明和初始化中不允许使用泛型形参
不管为泛型形参传入哪一种类型实参,对于Java
来说,它们依然被当成同一个类处理,在内存中也只占用一块内存空间,因此在静态方法、静态初始化块或者静态变量的声明和初始化中不允许使用泛型形参。下面程序演示了这种错误。
1 | public class R<T> { |
1 | Cannot make a static reference to the non-static type TJava(536871434) |