2013-02-15 5 views
7

のは、私はfolowingているとしましょう:使用ジェネリック

List<Apple> myList = new ArrayList<Apple>(); 

を私はmyList.add(myApple)を呼び出したい場合は、JavaはAppleの種類、ありません(もちろんのサブクラスを除く)他のものを持っているmyAppleから期待しています。しかし、<>の中で宣言された型に応じてオブジェクト(Blender)を持っていて、メソッドのシグネチャが違う場合は、メソッドのオーバーロードがありません。ように:

Blender<Apple> Tool = new Blender<Apple>(); 
Tool.blendIt(new Apple()); //expects to have only apples in here 

Blender<Banana> OtherTool = new Blender<Banana>(); 
OtherTool.blendIt(new Banana()); //only Banana's are permitted 

可能ですか?

+0

'instanceof'演算子で' Banana'または 'Apple'のインスタンスがあるかどうかを調べることができます。 – enrybo

+0

はい、できますが、 'Blender'の中に' Strawberry'を入れるとすぐに悪くなります:)フレキシブルな解決策が必要です – TomatoMato

答えて

11

あなたが探しているのはGeneric Classです。

class Blender<T>{ 
T t; 
public void blendIt(T arg){ 
//stuff 
} 
} 

class Test { 
    public void method() { 
    Blender<Apple> blendedApple = new Blender<Apple>(); 
    blendedApple.blendIt(new Apple()); 
    Blender<Bannana> blendedBannana = new Blender<Bannana>();  
    blendedBannana.blendIt(new Bannana()); 
    } 
} 
+0

これは私が探しているものです。ありがとうございます! – TomatoMato

+0

@トマートママ大歓迎です。 :)また、ジェネリッククラスの宣言でワイルドカードを使用することはできないことに注意してください。つまり、クラスBlender はコンパイラエラーです:btw、受け入れられたと答えてマークすることを忘れないでください:) – PermGenError

2

はい、それはです:Javaのジェネリックで

public class Blender<T> { 
    public void blendIt(T arg) { ... } 
} 
1

はちょうどのみCollectionsのためではありません。これは一般的な概念であり、クラス、メソッドなどに適用されます。ジェネリッククラスを作成できます。

関連する問題