2012-01-22 17 views
2

6行目で何が起こっていますか? <C extends Cat>は返されたuseMeです、そうですか? <? super Dog>は何をしますか?Javaの汎用メソッド

2. class Animal { } 
3. class Dog extends Animal { } 
4. class Cat extends Animal { } 
5. public class Mixer<A extends Animal> { 
6. public <C extends Cat> Mixer<? super Dog> useMe(A a, C c) { 
7. //Some code 
8. } }  
+0

私はuseMeがあなたの方法だと思います。 この場合、ミキサーに間違っています。 –

答えて

3

<C extends Cat>useMeCatを拡張する必要があります1つの汎用パラメータ、Cを、持っていることを指定します。

戻り値の型はMixer<? super Dog>です。 ?wildcardを示します。

+0

ありがとう!ここで複数の汎用パラメータを使用する方法を教えてください。カンマで区切っても機能しません。 () – onlinenaman

+1

@onlinenaman: ''のようになります。 –

2

<C extends Cat>は返品タイプではありません。 Mixer<? super Dog>です。 前者は、cのタイプを指定するためにのみ指定されています。

2

いいえ、戻り型はMixer<? super Dog>であり、そしてこの方法自体は、一般的なパラメータCを使用する一般的な方法であることができCatを拡張し、パラメータC c

3

最初のジェネリックパラメータとして使用される任意のクラス仕様<C extends Cat>はをCatまたはそれに由来するパラメータCでパラメータ化された汎用メソッドまたはCatとします。

第ジェネリックパラメータ指定<? super Dog>ソールジェネリックパラメータがDog又はDogクラス自体のスーパークラスであるパラメータ化Mixerあるメソッドの戻り型を指します。

したがって、ライン6つの手段:useMeCCat由来する(又はCat自体である)を用いてパラメータ化ジェネリックメソッドです。このメソッドは、ACの2つの引数をとり、スーパータイプDog(おそらく)でパラメータ化されたタイプMixerを返します。

関連する問題