2016-05-24 5 views
3

で許可されていないのはなぜジェネリックでsuperキーワードは、ジェネリック医薬品ではクラスレベル

class A<T extends Number>

を許可されていません

class A<T super Integer>

しかし

を許可されている私は、この点が届きません。これは初心者の質問のように聞こえるかもしれないが、私は Java Generics: extends, super and wildcards explainedを引用し、それに

+0

これは明らかにされます: - http://stackoverflow.com/questions/4343202/difference-between-super-t-and-extends-t-in-java – Apollo

+0

@akhilワイルドカード ''がで許可されていません?クラスレベル – emotionlessbananas

+0

"私が間違っていると私を訂正してください":[* Producer Extends; Consumer Super *](http://stackoverflow.com/questions/2723397/what-is-pecs-producer-extends-consumer-super)を参照してください。したがって、構造体にデータを入れるときは 'super'が使われます。 'extend'はあなたがそれを取り出しているときに使われます。 –

答えて

4

こだわっている:

バインドスーパーがクラス定義で許可されていません。

//this code does not compile ! 
class Forbidden<X super Vehicle> { } 

なぜですか?そのような構造は意味をなさないからです。たとえば、ForbiddenクラスをObjectでインスタンス化することができるため、Vehicleでtypeパラメータを消去することはできません。とにかくObjectに型パラメータを消去する必要があります。禁止されているクラスについて考えると、Vehicleのスーパークラスだけでなく、Xの代わりに任意の値をとることができます。スーパーバインドの使用には何の意味もありません。私たちには何も得られません。したがって、許可されていません。

+3

私はこれについてコメントするのが遅いことを知っています。この照会をクリアしてください: "Forbiddenクラスをオブジェクトでインスタンス化できるため、Vehicleで型パラメータを消去することはできません" "List <?super Number>"の場合は該当しませんか?これもObjectに対して消去する必要があります。なぜこれが許可されていますか? – vvtx

関連する問題