簡體   English   中英

為什么 Java 不允許擴展類型參數?

[英]Why doesn't Java allow extending type parameters?

為什么這段代碼無法編譯?

public class Wrapper<T> extends T {}

是因為這在語義上從來都不是正確的設計選擇嗎? 或者由於某種類型的歧義,這在物理上不能用任何語言編譯嗎?

我想您可以使用它來創建一個public class Persistent<T> extends T {} ,例如,它允許您使用某些功能擴展T以將T序列化為字節數組並將其存儲在磁盤上,同時仍然允許要傳遞給函數的Persistent<T>實例,否則這些函數只會采用T類型的值。

因此這是可能的:編輯:這是不可能的,因為load()可能沒有合理的實現(正如michid正確指出的那樣)。 不過,為了不破壞他的評論,我會把它留在這里。

Integer i1 = Integer.valueOf(5);
Persistent<Integer> i2= new Persistent<Integer>();
i2.load(i1) //example method to load i1 into i2, basically serializing it

List<Integer> myIntegers = new ArrayList<>();
famousPeople.add(i1);
famousPeople.add(i2);

當您extend class 時,您可以通過超級 class 提供的一些額外功能來擴展現有功能。 當超級 class 為T時,它可以是任何東西,但你不知道是什么。 那么你將如何擴展你一無所知的東西呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM