簡體   English   中英

類型參數為E的子類的泛型E

[英]Generic class E with type parameter to be a subclass of E

我對Java中的泛型概念還比較陌生,我無法分辨這兩個答案之間的區別。

手頭的問題是:
假設我們有一個通用類E,並且我們希望類型參數EE 換句話說,僅當類FE或從E繼承時,才允許E<F>

我將選擇范圍縮小到可能。

1. class E<T extends E>
2. class E<T extends E<T>>.

我相信選項1符合該問題的規范。 但是我對選項2感到困惑,它實際上擴展了什么。

好吧,選項1實際上使用了原始類型。

您將E定義為具有參數T ,因此E是參數化類型。 如果定義T來擴展E ,則還必須指定E的類型參數,否則E是原始類型。

因此,唯一的“有效” 1選項是選項2:

class E<T extends E<T>>

Enum類是遞歸類型參數的眾所周知的示例。 請參閱Java Enum定義


1從技術上講,第一種選擇在語法上正確的意義上也是有效的。 但是原始類型僅用於向后兼容。 新代碼絕不能包含原始類型。 另請參閱什么是原始類型,為什么我們不應該使用它?

暫無
暫無

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

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