![](/img/trans.png)
[英]Is it possible to specify both upper and lower bound constraints on type parameters in Java?
[英]Can you define a generic bound that both has lower and upper bounds?
是否可以定義一個通用綁定:
SomeInterface
MyClass
類的超類 就像是:
Collection<? extends SomeInterface & super MyClass> c; // doesn't compile
根據規范 ,答案是否定的(你可以有super
或extends
,但不是兩者):
TypeArguments:\n <TypeArgumentList>\n\n TypeArgumentList: \n TypeArgument\n TypeArgumentList,TypeArgument\n\n TypeArgument:\n 引用類型\n 通配符\n\n 通配符:\n ? WildcardBounds 選擇\n\n WildcardBounds:\n 擴展ReferenceType\n 超級ReferenceType
在聲明變量時,不能使用帶有邊界的泛型類型(在您的情況下為T
)。
它應該是通配符( ?
),或者只使用類的完整泛型類型。
例如
// Here only extends is allowed
class My< T extends SomeInterface >
{
// If using T, then no bounds are allowed
private Collection<T> var1;
private Collection< ? extends SomeInterface > var2;
// Cannot have extends and super on the same wildcard declaration
private Collection< ? super MyClass > var3;
// You can use T as a bound for wildcard
private Collection< ? super T > var4;
private Collection< ? extends T > var5;
}
在某些情況下,您可以通過向類(或方法)添加額外的泛型參數並在該特定參數上添加綁定來收緊聲明:
class My <
T extends MyClass< I >,
I extends SomeInterface
>
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.