我有一个泛型(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();
因此,根据我在该方法中提供的类型,返回类型应该更改。
答案 0 :(得分:-1)
如果你要做的就是避免演员,你可以这样做:
public <T> IParameter<T> getParameter(Type type);
然后你可以这样称呼它:
IParameter<Integer> parameter = parameters.getParameter(Type.TEST1);
但基本上,你只是隐藏你的演员。如果你错误地投射了东西,你会发现当你从集合中拉出物品时。