1

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

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

在 Actionscript 3.0 中,这将是

super(Vector.<TileVO>,Boolean);  

上面的代码会将类引用传递给 TileVO 和布尔向量的构造函数。

在 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>了,它似乎不起作用!

4

2 回答 2

1

不幸的是,它不能ASVector<TileVO>作为 Java 中的类来访问。ASVector在 Java 中, with没有实际的类实现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.

于 2013-08-28T16:29:20.583 回答
1

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

于 2013-08-29T11:03:05.067 回答