6

我正在尝试使用构造函数(来自 Ektorp 库)扩展以下类:

public class CouchDbRepositorySupport<T extends CouchDbDocument> implements GenericRepository<T> {

...

protected CouchDbRepositorySupport(Class<T> type, CouchDbConnector db) {
...

}

这是我的实现:

public class OrderRepository extends CouchDbRepositorySupport<Order<MenuItem>> {

    public OrderRepository(CouchDbConnector db) {
        super(Order<MenuItem>.class, db);

问题出在Order<MenuItem>.class零件上。Java 编译器告诉我:

 Syntax error on token ">", void expected after this 

我试过了(Order<MenuItem>).classOrder.classnew Order<MenuItem>().getClass()没有更好的运气。

如何检索泛型类的 .class 属性?

4

2 回答 2

2

正确的语法是:

Order.class

在 Java 中,Order<MenuItem>.class并且在运行时Order.class同一个类,泛型类型信息(<MenuItem>类型参数)在运行时会因为类型擦除而丢失- 这是 Java 泛型类型系统的严重限制。

于 2012-05-15T20:08:32.533 回答
1

如果您更改类型以发布内部类型,则可以通过以下方式获取:

public class CouchDbRepositorySupport<C, T extends CouchDbRepositorySupport<C>> implements GenericRepository<T> {
...

    protected CouchDbRepositorySupport(Class<C> type, CouchDbConnector db) {
        ...
    }

public class OrderRepository extends CouchDbRepositorySupport<MenuItem, Order<MenuItem>> {

    public OrderRepository(CouchDbConnector db) {
        super(MenuItem.class, db);

关于如何声明父类,您有几个选择;这只是一个例子。

免责声明:我是在没有 IDE 的情况下手动完成的,因此可能存在一些小的语法问题,但这个概念应该有效。

于 2012-05-16T02:39:28.603 回答