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}