将运行时对象的类传递给java中的泛型字段

时间:2013-07-22 18:58:48

标签: java class types casting containers

我正在研究实体系统。我的组件确实包含Value-Objects的ArrayList,因此我可以在运行时构建组件。 这是我的价值观:

public class Value<V> implements Cloneable{

    private V value = null;
    private String name;
    public Value()
{
}

public Value(String name)
{
    this.name = name;
}

public V getValue()
{
    return value;
}

public void setValue(V value)
{
    this.value = value;
}

@Override
public boolean equals(Object o)
{
    return name.equals(((Value)o).name);
}

@Override
public Value clone()
{
    return new Value<V>(new String(name));
}
}

假设我想用Double填充Value-Object(这可行):

Value<Double> v = new Value<Double>("xCoordinate");

为什么我不能这样做:

Object o = new Double(42);
Value<o.getClass()> v = new Value<o.getClass>("theAnswer");

我想将Object“o”的类传递给Variable if Value类型,为什么我不能从“o”的运行时表示中获取类。

1 个答案:

答案 0 :(得分:0)

这是无法做到的,因为编译器会删除所有泛型类型引用。除了字段和方法声明之外,虚拟机不知道存在泛型。

如果这是您想要做的,请模仿编译器并使用以下内容:

Object o = new Double(42);
Value v = new Value("theAnswer");

您将获得comipiler警告,并且您必须转换返回值。如果您不想要警告,请使用:

Object o = new Double(42);
Value<Object> v = new Value<Object>("theAnswer");