2013-02-11 54 views
2

我試圖熟悉java中的泛型。我仍然不確定如何創建一個簡單的類來取兩種類型(String,Integer)。以下是在我的上下文中使用泛型的小小嚐試。Java如何生成接受字符串和整數的泛型類?

public class Container <T> 
{ 

    public T aString() 
    { 
    //Do i know I have a string? 
    } 

    public T anInt() 
    { 
    //How do I know I have an integer? 
    } 

    public Container<T>() 
    { 
    //What would the constructor look like? 
    } 


} 

我引用此頁面oracle generics但我仍然不知道我在這裏做什麼。你是否首先弄清楚在課堂上你的「T」是什麼類型?

是真正用於接口和抽象類的泛型編程嗎?

+0

試圖約束的對象類型的泛型集合在兩個班(字符串和整數)沒有一個共同的祖先對象似乎有點被迫。 – Aurand 2013-02-11 18:40:32

回答

3

那麼,容器類實際上可以容納一個字符串,整數或任何類型,你只需要正確使用它。事情是這樣的:

public class Container<T> { 
    private T element; 

    public T getElement() { 
     return element; 
    } 

    public void setElement(T element) { 
     this.element = element; 
    } 

    public Container(T someElement) { 
     this.element = someElement; 
    } 
} 

而且你可以使用它像這樣:

Container<Integer> myIntContainer = new Container<Integer>(); 
myIntContainer.setElement(234); 

或...

Container<String> myStringContainer = new Container<String>(); 
myStringContainer.setElement("TEST"); 
+0

感謝您的回覆。這比我想看到/聽到的更少。但是構造函數呢?那將是什麼樣子? – stackoverflow 2013-02-11 19:09:26

+1

你可以傳遞一個T類型的參數給你的構造函數。我將編輯此答案以添加示例... – jahroy 2013-02-11 19:17:31

0

如果要使用StringInteger,則可能需要使用Object作爲類型。這可以坦率地消除泛型的大部分好處,您應該檢查一下是否確實存在良好的模型和交織字符串和整數的原因。

但是,它對接口,自定義類和摘要很有用。這意味着你可以保證對象是正確的類型,並且不需要每次爲每種類型實現它們。

2

如果該類確實爲字符串和整數顯著不同的東西,也許這應該是兩個階級,各專業的一這些類型。

我認爲泛型適用於不同類型的引用可以同樣方式處理的情況。 ArrayList<String>ArrayList<Integer>不需要任何特定於String或Integer的代碼。