如果我定義下面的類沒有限制仿製藥的行爲
public class SomeClass<T extends A> {..}
當然我不能定義一個變量,這種方式 - B
無關類。
SomeClass<B> instance = new SomeClass<B>();
但這個工程:
SomeClass instance = new SomeClass();
我缺少什麼?
如果我定義下面的類沒有限制仿製藥的行爲
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的舊1.4代碼將運行以及新代碼。因此,您可以編寫一個沒有泛型的List和任何其他使用泛型的類。但是,當然你會失去任何類型的安全。