以下是在JLS https://docs.oracle.com/javase/specs/jls/se7/html/jls-18.htmlJava語法:NonWildcardTypeArguments
NonWildcardTypeArguments:
<TypeList>
TypeList:
ReferenceType { , ReferenceType }
ReferenceType:
Identifier [TypeArguments] { . Identifier [TypeArguments] }
TypeArguments:
< TypeArgument { , TypeArgument } >
TypeArgument:
ReferenceType
? [ (extends | super) ReferenceType ]
根據NonWildcardTypeArguments的名稱第18章的規定,它不應該允許外卡。但是,下面的代碼編譯
public class NonWildcardTypeArgumentsTest {
public void test(Test<java.util.Set<? extends Object>> args) {
}
}
class Test<T> {}
本例中的類型參數滿足NonWildcardTypeArguments的定義,它包含通配符:
<java.util.Set<? extends Object>>
我爲此感到困惑。爲什麼它有效?謝謝
作爲一個方面說明,這不是JLS8 – assylias
這是jls7的第18章。 – CMZS
是的,我剛剛提到它已被刪除在JLS 8中。 – assylias