これによりコンパイルエラーが発生するのはなぜですか:
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
。
最初のバリアントが許可またはサポートされていないのはなぜですか? 技術的には、それをサポートすることは完全に可能であるように思われます。設計上無効なのか、それとも (まだ) サポートされていないのか?
リンクされた重複した回答から「何も買わない」というメッセージが表示されません。1 つは、使用できる名前付きの型を購入するS
ことです。2 番目のバリアント ( ? super T
) はそれを提供しません。
Java7 と Java8 で同じことに注意してください