无约束的泛型行为

时间:2012-11-22 07:24:56

标签: java generics

如果我定义以下类

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

我当然无法以这种方式定义变量 - B是无关的类。

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

但这有效:

SomeClass instance = new SomeClass();

我错过了什么?

3 个答案:

答案 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和任何其他使用泛型的类。但当然你会失去任何类型的安全。