簡體   English   中英

同一通配符的下限和上限通用約束

[英]Lower and upper bound generic constraints on same wildcard

讓我們假設以下 class 層次結構:

class A{}
class B extends A{}
class C extends B{}
class D extends C{}

在 Java 中,可以像這樣用 generics 定義通配符:

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;

但是,這些似乎會引發編譯時錯誤。

有沒有辦法將通用通配符綁定到 class 層次結構的特定部分?

我對這在理論上是否可行感興趣,我沒有實際用例。

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 出現零次或一次。 也就是說,x 是一個可選符號。 包含可選符號的替代方案實際上定義了兩種替代方案:一種省略可選符號,另一種包含可選符號。

對於有界通用通配符,這意味着只允許一個通配符綁定。

暫無
暫無

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

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