有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java检索。泛型类的class属性

我正在尝试使用构造函数(从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 

我试过了{}、{}和{},但运气不好

我可以做些什么来检索。泛型类的class属性


共 (2) 个答案

  1. # 1 楼答案

    正确的语法是:

    Order.class
    

    在Java中,Order<MenuItem>.classOrder.class在运行时是相同的类,泛型类型信息(<MenuItem>类型参数)在运行时丢失,因为type erasure是Java泛型类型系统的一个严重限制

  2. # 2 楼答案

    如果将类型更改为发布内部类型,可以通过以下方式获得:

    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的情况下手工完成的,因此可能会有一些小的语法问题,但是这个概念应该可以工作