2012-11-22 32 views
0

如果我定义下面的类没有限制仿制药的行为

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

当然我不能定义一个变量,这种方式 - B无关类。

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

但这个工程:

SomeClass instance = new SomeClass(); 

我缺少什么?

回答

4

Java中的泛型是可选的。

如果你使用它们,你必须“正确地”使用它们。但如果你不使用它们的所有,它会编译得很好(但是你错过了它们提供的类型安全特性,并且应该得到关于它的编译时警告)。

1

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

List list = new ArrayList(); // you will get warning to use generics 
0

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

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