で許可されていないのはなぜジェネリックでsuperキーワードは、ジェネリック医薬品ではクラスレベル
class A<T extends Number>
が
を許可されていません
class A<T super Integer>
しかし
を許可されている私は、この点が届きません。これは初心者の質問のように聞こえるかもしれないが、私は Java Generics: extends, super and wildcards explainedを引用し、それにで許可されていないのはなぜジェネリックでsuperキーワードは、ジェネリック医薬品ではクラスレベル
class A<T extends Number>
が
を許可されていません
class A<T super Integer>
しかし
を許可されている私は、この点が届きません。これは初心者の質問のように聞こえるかもしれないが、私は Java Generics: extends, super and wildcards explainedを引用し、それにこだわっている:
バインドスーパーがクラス定義で許可されていません。
//this code does not compile ! class Forbidden<X super Vehicle> { }
なぜですか?そのような構造は意味をなさないからです。たとえば、ForbiddenクラスをObjectでインスタンス化することができるため、Vehicleでtypeパラメータを消去することはできません。とにかくObjectに型パラメータを消去する必要があります。禁止されているクラスについて考えると、Vehicleのスーパークラスだけでなく、Xの代わりに任意の値をとることができます。スーパーバインドの使用には何の意味もありません。私たちには何も得られません。したがって、許可されていません。
私はこれについてコメントするのが遅いことを知っています。この照会をクリアしてください: "Forbiddenクラスをオブジェクトでインスタンス化できるため、Vehicleで型パラメータを消去することはできません" "List <?super Number>"の場合は該当しませんか?これもObjectに対して消去する必要があります。なぜこれが許可されていますか? – vvtx
これは明らかにされます: - http://stackoverflow.com/questions/4343202/difference-between-super-t-and-extends-t-in-java – Apollo
@akhilワイルドカード ''がで許可されていません?クラスレベル – emotionlessbananas
"私が間違っていると私を訂正してください":[* Producer Extends; Consumer Super *](http://stackoverflow.com/questions/2723397/what-is-pecs-producer-extends-consumer-super)を参照してください。したがって、構造体にデータを入れるときは 'super'が使われます。 'extend'はあなたがそれを取り出しているときに使われます。 –