[英]Generic class E with type parameter to be a subclass of E
我對Java中的泛型概念還比較陌生,我無法分辨這兩個答案之間的區別。
手頭的問題是:
假設我們有一個通用類E,並且我們希望類型參數E
為E
。 換句話說,僅當類F
為E
或從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.