このコードが正常にコンパイルされるのはなぜでしょうか?
ソースコード:
abstract class A<K extends Number>
{
public abstract <M> A<? super M> useMe(A<? super M> k);
}
正常にコンパイルされました
どのように機能し、なぜこれがコンパイルされるのですか? M は任意の型であるのに、なぜ使用できるのでしょうか。次のようにする必要があります<M extends Number>
。これはコンパイルされません:
abstract class A<K extends Number>
{
public abstract <M> A<? super M> useMe(A<M> k);
}
エラーメッセージ:
型引数 M は型変数 K の境界内にありません。ここで、M、K は型変数です: M extends メソッド useMe(A) で宣言された Object K extends クラス A で宣言された Number
違いはなんですか?