Java 方法类型参数上出现意外语法错误
为什么这会导致编译错误:Java 方法类型参数上出现意外语法错误,java,syntax-error,type-parameter,language-concepts,Java,Syntax Error,Type Parameter,Language Concepts,为什么这会导致编译错误: public <S super T> void addImplements(Class<S> cl) 基本相同,但没有命名类型S 为什么不允许或不支持第一个变体?从技术上讲,完全可以支持它。那么,它在设计上是无效的还是不受支持 我不会从链接的重复答案中得到“不给你买任何东西”。比如,它给我买了一个可以使用的命名类型S。第二种变体(?super T)不提供这种功能 注意在Java7和Java8中相同定义了: 和一个带有: 因此,明确不允许使用关键
public <S super T> void addImplements(Class<S> cl)
基本相同,但没有命名类型S
为什么不允许或不支持第一个变体?从技术上讲,完全可以支持它。那么,它在设计上是无效的还是不受支持
我不会从链接的重复答案中得到“不给你买任何东西”。比如,它给我买了一个可以使用的命名类型S
。第二种变体(?super T
)不提供这种功能
注意在Java7和Java8中相同定义了:
和一个带有:
因此,明确不允许使用关键字super
。原因如下:
类型参数可以有几个上限,但没有下限。这主要是因为类的下限类型参数会让人感到困惑,并且没有特别的帮助
可能重复您这样做的用例?更新问题以显示编译的替代方式,尽管没有命名类型
S
+1作为语法参考。不确定,但我喜欢这里的“混淆”作为有效参数(除非他们的意思是它会混淆解析器,但我不相信)。混淆程序员不是一个有效的参数publicGetStuff()
也会让人很困惑。我只需要传递我的T
类的一个实现接口,并将其标记为S
。
public <S extends T> void addImplementedBy(Class<S> cl)
public void addImplements(Class<? super T> cl)
TypeParameter:
{TypeParameterModifier} Identifier [TypeBound]
TypeBound:
extends TypeVariable
extends ClassOrInterfaceType {AdditionalBound}