返回泛型列表中的值

时间:2014-01-30 15:55:32

标签: java generics enums

我有一个泛型(IParameter)的列表(IParameterCollection),它应该是某个东西的参数。 此泛型具有“类型”,其中包含实际参数的类型。

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()

并接收一个Integer类型的对象而不将其转换为一个?

我想做什么:

我有一个包含参数的效果。 如果我想更改我想调用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(); 

因此,根据我在该方法中提供的类型,返回类型应该更改。

1 个答案:

答案 0 :(得分:-1)

如果你要做的就是避免演员,你可以这样做:

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

然后你可以这样称呼它:

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

但基本上,你只是隐藏你的演员。如果你错误地投射了东西,你会发现当你从集合中拉出物品时。