如何获取泛型类的类引用



我是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中,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访问。

最新更新