如果我定义以下类
public class SomeClass<T extends A> {..}
我当然无法以这种方式定义变量 - B
是无关的类。
SomeClass<B> instance = new SomeClass<B>();
但这有效:
SomeClass instance = new SomeClass();
我错过了什么?
答案 0 :(得分:4)
Java中的泛型是可选的。
如果您使用它们,则必须“正确”使用它们。
但是如果你不使用它们,,它会编译得很好(但是你错过了它们提供的类型安全功能,应该得到关于编译时警告它)。
答案 1 :(得分:1)
泛型是编译时间。在运行时,它只是SomeClass。类似于我们创建非通用列表,如:
List list = new ArrayList(); // you will get warning to use generics
答案 2 :(得分:0)
Generics将帮助您并提供类型安全性,但仅限于编译时。正确编译代码后,通用类型将被删除,从代码的角度来看,List看起来像一个没有任何泛型的常规List。
其中一个原因是向后兼容性。使用没有泛型的List的旧1.4代码将与新代码一样运行。因此,您可以编写一个没有泛型的List和任何其他使用泛型的类。但当然你会失去任何类型的安全。