讓我們假設以下類層次結構:
class A{}
class B extends A{}
class C extends B{}
class D extends C{}
在 Java 中,可以使用這樣的泛型定義通配符:
List<? extends A> aOrDown;//A or any subtype of A
List<? super D> dOrUp;//D or any supertype of D
是否可以將相同的通配符系結到上限和下限?
我會想象這樣的事情:
List<? extends A super B> combined;
List<? extends A & super B> combined;
但是,這些似乎會引發編譯時錯誤。
有沒有辦法將通用通配符系結到類層次結構的特定部分?
我對這在理論上是否可行感興趣,我沒有實際的用例。
uj5u.com熱心網友回復:
JLS 的第 4.5.1 節指定了通用通配符的語法:
TypeArguments: < TypeArgumentList > TypeArgumentList: TypeArgument {, TypeArgument} TypeArgument: ReferenceType Wildcard Wildcard: {Annotation} ? [WildcardBounds] WildcardBounds: extends ReferenceType super ReferenceType
在這里,WildcardBounds寫在方括號中。在JLS 的第 2.4 節中,解釋了在這種情況下,方括號表示只能放置一次的可選元素:
產生式右側的語法 [x] 表示 x 出現 0 次或 1 次。也就是說,x 是可選符號。包含可選符號的替代項實際上定義了兩種選擇:一種省略可選符號,另一種包含它。
對于有界通用通配符,這意味著只允許一個通配符邊界。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/460208.html
