我是java的新手(来自Actionscript 3.0后台),我正在尝试将一些Actionscript代码移植到java(as3signals到jsignal)
我正在尝试获取一个泛型类的类名,以便将其传递给一个超级调用。
在Actionscript 3.0中,这将是
super(Vector.<TileVO>,Boolean);
上面的代码将把类引用传递给TileVO和Boolean的Vector的构造函数。
在Java中,这似乎不起作用,我知道我做错了什么:
super(ASVector.class<TileVO>,boolean.class);
简而言之,如何获得由TileVO对象组成的ASVector类的类引用?
谢谢!
后期编辑:
我刚刚意识到代码没有正确显示(被视为html)
发布一些源代码:
public Signal(Class<?>... params) {
this.params = params;
}
我需要通过构造函数传递给Signal类引用。
new Signal(int.class)
例如工作于
我需要知道如何将这种形式的对象的类传递给Signal的构造函数:
ASVector<TileVO>
我试过ASVector.class<TileVO>
,但似乎不起作用!
在编译时,您的案例中的泛型类型参数<TileVO>
会被"擦除";编译器将它们的一些用法转换为隐式强制转换,但有关它们的信息在字节码中被丢弃。这意味着对于API,ASVector<TileVO>
没有特定的类型,运行时类型仅为ASVector
,因此传入ASVector.class
。如果运行时处理程序需要知道ASVector
的内容是TileVO
对象,那么还需要在varargs中的某个点将TileVO.class
作为参数传入。
遗憾的是,在Java中无法将ASVector<TileVO>
作为一个类访问。在Java中,ASVector
和TileVO
没有实际的类实现。查看Java泛型wiki:
Java泛型不同于C++模板。Java泛型只生成泛型类或函数的一个编译版本,而不考虑所使用的参数化类型的数量。
你可以做一些更具体的事情来解决这个问题:
public static class ASVector_TileVO extends ASVector< TileVO >
{
public ASVector_TileVO( ASVector< TileVO > objects )
{
super( objects );
}
};
现在ASVector_TileVO
是一个基类,可以用ASVector_TileVO.class
访问。