Ale*_*ert 1 grails groovy grails-orm
我编写了一个list()方法,用于检索与一组过滤器匹配的域类实例列表,该方法用于不同的域类; 除了调用GORM方法的类之外,代码完全相同:
Store => Store.createCriteria()
Client => Client.createCriteria()
等.
为了避免代码重复,我尝试通过创建泛型类来创建list方法的通用版本:
class QueryUtils<T> {
def list(params) {
T.createCriteria()
[...]
}
}
Run Code Online (Sandbox Code Playgroud)
这样,我的每个服务(StoreService,ClientService等)都可以扩展QueryUtils:
class StoreService extends QueryUtils<Store>
class ClientService extends QueryUtils<ClientService>
Run Code Online (Sandbox Code Playgroud)
依此类推,并继承与其域类类型对应的list()方法.
问题是在执行期间,它不起作用,因为T的有效类型是java.lang.Object,而不是我指定的域类类型:
groovy.lang.MissingMethodException:没有方法的签名:static java. lang.Object.createCriteria()适用于参数类型:()值:[]
你知道如何解决这个问题吗?
我曾经为Hibernate做过这样的事情(在Grails之外) - https://burtbeckwith.com/blog/?p=21
但它不适用于Groovy,因为编译器忽略了泛型.但是你可以改变它以在构造函数中取代类而不是泛型类:
class QueryUtils {
private final Class clazz
QueryUtils(Class clazz) {
this.clazz = clazz
}
def list(params) {
clazz.createCriteria()
[...]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |