如何获取泛型类的类引用

时间:2013-08-28 15:11:46

标签: java actionscript-3 class

我是java的新手(来自Actionscript 3.0背景),我正在尝试将一些actionscript代码移植到java(as3signals到jsignal)

我正在尝试获取泛型类的类名,以便将其传递给超级调用。

在Actionscript 3.0中,这将是

super(Vector.<TileVO>,Boolean);  

上面的代码会将类引用传递给Vector of TileVO和Boolean的构造函数。

在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>,似乎无法正常工作!

2 个答案:

答案 0 :(得分:1)

不幸的是,在Java中访问ASVector<TileVO>是不可能的。在Java中,ASVectorTileVO没有实际的类实现。查看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访问。

答案 1 :(得分:1)

在编译时,您的案例中的泛型类型参数<TileVO>经历“擦除”;编译器将它们的一些用法转换为隐式转换,但在字节码中丢弃有关它们的信息。这意味着对于您的API,ASVector<TileVO>没有特定的类型,运行时类型只是ASVector,因此您传入ASVector.class。如果运行时处理程序必须知道ASVector的内容是TileVO个对象,那么您还需要在varargs中的某个位置传入TileVO.class作为参数。