为什么会导致编译错误:
public <S super T> void addImplements(Class<S> cl)
而这没关系:
public <S extends T> void addImplementedBy(Class<S> cl)
T
是在类上指定的类型参数。第一个错误消息是Syntax error on token "super", , expected
更新
这显然没问题:
public void addImplements(Class<? super T> cl)
这本质上是相同的,但没有命名的 type S
。
为什么不允许或支持第一个变体?从技术上看来,完全有可能支持它。那么它是设计无效还是不支持(尚)?
我没有从链接的重复答案中得到“不给你买任何东西”。一方面,它给我买了一个S
我可以使用的命名类型。第二个变体 ( ? super T
) 不提供。
注意Java7 和 Java8 相同