2013-02-15 51 views
7

使用泛型比方說,我有如下因素:沒有收藏

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

如果我想打電話給myList.add(myApple),從Java myApple預計有Apple類型,而不是任何其他人(當然除了子類)。但是如果我想擁有一個對象(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 2013-02-15 18:59:34

+0

是的,我可以,但是一旦我把'Strawberry'放入'Blender'裏面就會變得很糟糕:)所以需要靈活的解決方案 – TomatoMato 2013-02-15 19:09:58

回答

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 2013-02-15 19:10:58

+0

@TomatoMato歡迎您。 :)還記得你不能在通用類的聲明中使用通配符。即類Blender 是一個編譯器錯誤:)順便說一句,不要忘記標記答案接受:) – PermGenError 2013-02-15 19:12:56

2

是的,它是:

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

在Java泛型不只是只有Collections。這是一個通用的概念,適用於類,方法等。您可以創建一個通用類。