2016-10-16 4 views
4

に複数のバインドを使用する方法とき、私はジェネリックに新しいですし、私は私が理解し何複数の境界 について学んでいます聞く https://docs.oracle.com/javase/tutorial/java/generics/bounded.html使用するか、ジェネリック

からジェネリックを学んで

を次のようにクラスを指定することができますです
class D <T extends A & B & C> { /* ... */ } 
D<A> d = new D<>(); 

Aがない場合はB及びCは、他の双方 が賢明時エラーがB及びCも をOCURうコンパイル実装インターフェイス他//賢明なインタフェースがexpecedされなければならないだけコンパイル時エラーが

を生じるであろう

私はワイルドカードについて話していません

私の問題は、これを実際にプログラミングすることができていないことです。 コード作成中に複数の結合ジェネリックを使用する方法/例を探しています。

いつ使用しますか?

おかげ

+0

この質問とその答えは良い例です:) http://stackoverflow.com/q/38527711/982161 –

答えて

1

は、次のスニペットを考えてみましょう:

class SpineWarmCollection <T extends Vertebrate & Warmblooded> { /* ... */ } 

class Mammal extends Vertebrate implements Warmblooded {} 

class Bird extends Vertebrate implements Warmblooded {} 

class Reptile extends Vertebrate {} 

SpineWarmCollection<Mammal> mammalCollection = new SpineWarmCollection<>(); 

SpineWarmCollection<Bird> birdCollection = new SpineWarmCollection<>(); 

SpineWarmCollection<Reptile> reptileCollection = new SpineWarmCollection<>(); // Generates a compile error, since Reptiles are not warmblooded. 

脊椎動物は、動物の分類でクラスです。しかし、温血は特徴です。哺乳動物と鳥類の両方が温血であるため、暖かい血統のための単一の祖先クラスはありませんが、彼らの共通の祖先、脊椎動物はそうではありません。

Tは、脊椎動物と腹囲を拡張するクラスに過ぎないため、ジェネリックは、脊椎動物と腹囲で宣言されたすべてのメソッドにアクセスできます。

あなたはクラスは必要ありません。 Tはインターフェースのみを拡張することができます。これにより、インターフェースを実装するクラスのセットによってジェネリックを使用できるようになります。クラスのセットが互いに完全に無関係であっても可能です。

関連する問題