1

我正在研究一个实体系统。我的组件确实包含一个值对象的 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");

我想将对象“o”的类传递给类型变量如果值,为什么我不能从“o”的运行时表示中获取类。

4

1 回答 1

0

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

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

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

您将收到编译器警告,并且必须转换返回值。如果您不想要警告,请使用以下命令:

Object o = new Double(42);
Value<Object> v = new Value<Object>("theAnswer");
于 2013-07-22T19:06:50.177 回答