我正在尝试使用构造函数(来自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>).class
,Order.class
和new Order<MenuItem>().getClass()
而没有更好的运气。
如何检索泛型类的.class属性?
答案 0 :(得分:2)
正确的语法是:
Order.class
在Java中,Order<MenuItem>.class
和Order.class
在运行时是相同的类,泛型类型信息(<MenuItem>
类型参数)在运行时会丢失,因为type erasure - Java的泛型类型系统的严重限制。
答案 1 :(得分: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的情况下手工完成的,所以可能会有一些小的语法问题,但这个概念应该有效。