9

Class<? extends Integer>正常にコンパイルされますIntegerが、最終的な型であるため、上限として使用することは意味がありません (何もありませんextend)。

型パラメーターの上限として final 型を使用しようとすると、コンパイラの警告が表示されます。

型パラメーター T は、最終的な型 Integer によって制限されるべきではありません。最終的な型をさらに拡張することはできません

ワイルドカードの上限として final 型を使用してもまったく問題ないのに、型パラメーターに対して警告がスローされるのはなぜでしょうか? なぜ Java は、ワイルドカードが最終的な上位型によって境界付けられることを許可するのですか?

4

1 に答える 1

5

Class<Integer>は ほど代入を許容しませんClass<? extends Integer>

たとえば、これは次のようにコンパイルされます。

Class<? extends Number> numberClass = Integer.class;
Class<? extends Integer> integerClass = numberClass.asSubclass(Integer.class);

これはしません:

Class<? extends Number> numberClass = Integer.class;
Class<Integer> integerClass = numberClass.asSubclass(Integer.class);

私自身、あなたのようにコンパイラの警告を受け取ることができませんでした (おそらく、コンパイラの例と詳細を提供できますか?)。

于 2012-08-11T21:47:18.137 に答える