0

如果我定义以下类

public class SomeClass<T extends A> {..}

我当然不能以这种方式定义变量 -B是不相关的类。

SomeClass<B> instance = new SomeClass<B>();

但这有效:

SomeClass instance = new SomeClass();

我错过了什么?

4

3 回答 3

4

Java 中的泛型是可选的。

如果你使用它们,你必须“正确地”使用它们。

但是如果你根本不使用它们,它会编译得很好(但是你会错过它们提供的类型安全特性,并且应该得到一个关于它的编译时警告)。

于 2012-11-22T07:27:33.303 回答
1

泛型是编译时间。在运行时,它只是 SomeClass。类似于我们创建非通用列表,例如:

List list = new ArrayList(); // you will get warning to use generics
于 2012-11-22T07:30:30.320 回答
0

泛型只会帮助您并提供类型安全,但只是在编译时。正确编译代码后,泛型类型将被删除,从代码的角度来看,List 看起来就像没有任何泛型的常规 List。

原因之一是向后兼容性。使用没有泛型的 List 的旧 1.4 代码将与新代码一样运行。因此,您可以编写没有泛型的 List 和使用泛型的任何其他类。但是你当然会失去任何类型安全性。

于 2012-11-22T07:40:31.103 回答