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