[英]“Unexpected token” using lower-bounded wildcard (Java)
我有類似的東西:
interface Foo<T> {
//... lines [0,45]...
/*line 46*/ <R, X super T&R> List<X> weave(R value);
//...
}
但是IntelliJ正在報道:
有什么問題? 我不允許將名字綁定到下限嗎? 或者我只允許在上限使用R&X
表達式?
把它改成
interface Foo<T> {
//... lines [0,45]...
/*line 46*/ <R> List<? super T&R> weave(R value);
//...
}
產量
通過我對規范的閱讀, super
只能與通配符一起使用,不能被捕獲到類型變量中; 見JLS 4.5.1 。 類似地, &
僅在類型變量中有效,而不是類型參數 ,並且類型變量不能使用super
。
在考慮之后,這是我的解釋:類型變量的原因是消除顯式轉換以提高類型安全性。 當你聲明一個類型參數是super Foo
,你說這個參數可以是Foo
任何超類。 這意味着它可以是包括Object
在內的任何東西,因此您沒有安全的方法來假設其類型滿足該范圍的對象的任何內容,因此在命名的類型變量中沒有包含任何信息; 你只是通配符並且可以調用hashCode()
或toString()
,但沒有特定於類型的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.