我正在研究实体系统。我的组件确实包含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”的运行时表示中获取类。
答案 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");