2012-11-22 31 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和任何其他使用泛型的類。但是,當然你會失去任何類型的安全。