2014-01-30 79 views
-1

我有一個泛型(IParameter)的列表(IParameterCollection),它應該是某個東西的參數。 這個泛型有一個「Type」,它包含實際參數的類型。在泛型列表中的返回值

enum Type { 
    TEST1(Integer.class), 
    TEST2(Double.class); 

    Class<?> _clazz; 

    private Type(Class<?> clazz) { 
     _clazz = clazz; 
    } 
    public Class<?> getClazz() { 
     return _clazz; 
    } 
} 

interface IParameterCollection { 
    IParameter<?> getParameter(Type type); 
} 
interface IParameter<T> { 
    public Type getID(); 
    public T getValue(); 
} 

是它在某種程度上可以調用

IParameterCollection#getParameter(Type.TEST1).getValue() 

和接收整數類型的對象,而鑄造成一個?

我想做的事:

我有一個包含參數的效果。 如果我想更改我想調用getParameterCollection並接收IParameterCollection的參數。

IParameterCollection parameters = effect.getParameterCollection(); 

現在我要求收集所以根據不同型號,我給到該方法的具體參數

// should return the parameter with the generic type defined in the Type 
IParameter<Integer> parameter = parameters.getParameter(Type.TEST1); 
// should return Integer and not any unknown type 
parameter.getValue(); 

的返回類型應該改變。

+0

這真的不清楚。你想要做什麼?你能告訴我們實施嗎? – Happy

+2

[限制類型安全異構容器中的鍵]的可能重複(http://stackoverflow.com/questions/21414076/limiting-keys-in-type-safe-heterogenous-containers)。還有相關的:[爲什麼不應該Java枚舉文字能夠具有泛型類型參數?](http://stackoverflow.com/questions/4290878/why-shouldnt-java-enum-literals-be-able-to-have -generic-type-parameters)和[Java枚舉和泛型](http://stackoverflow.com/questions/5108733/java-enums-and-generics)。 –

+0

謝謝Paul,那就是我在尋找的東西。 http://stackoverflow.com/questions/21414076/limiting-keys-in-type-safe-heterogenous-containers – andre

回答

-1

如果你正在試圖做的是避免投足,你可以這樣做:

public <T> IParameter<T> getParameter(Type type); 

然後就可以調用它像這樣:

IParameter<Integer> parameter = parameters.getParameter(Type.TEST1); 

但基本上,你只是隱藏你的演員。如果你錯誤地投了東西,你會發現當你從收藏中拉出物品。

+0

我不只是想隱藏它。 「類型」知道參數的類型。 – andre

+0

因爲擦除,隱藏鑄件幾乎可以在這種情況下獲得。 「類型」信息幾乎是純粹的編譯型工件。順便說一下,感謝downvote - 這是一個鼓勵迴應的好方法。 – bcholmes

+0

@bcholmes其實,我是downvoter。我低估了,因爲簽名迫使一個無法證明的不受控制的演員。雖然你在答案中暗示了這一點,但仍然有人可能會複製這些代碼。 –