尴尬,但我找不到我的方式错误。无论我尝试什么M
总是对象(不是实际的泛型类型)。我有一个简单的设置(M
是一个grails域):
class NewsController extends AbstractController<News> {
}
class AbstractController<M> {
def show(Long id){
log.info(M)
// prints: INFO common.AbstractController - class java.lang.Object
def entity = M.get(id) //errors
// .. other code
}
}
请保持温柔,这感觉像是一个大脑屁/一些愚蠢的东西。
答案 0 :(得分:1)
我会说Type Erasure(或它的groovy等价物)。
因此M
仅用于编译时检查(至少在java中)。现在,如何使用解释性语言更有趣,但我认为你很可能是相关环境的受害者。
似乎groovy有更严格的要求完全丢弃来自源的通用信息。这可能会在运行时产生一些有趣的行为。
答案 1 :(得分:0)
可能很简单,我提出的另一种选择(因为type erasures
,恕我直言,一个主要的缺陷渲染类泛型无用)是:
class AbstractController{
abstract getDomainClass();
def show(Long id){
log.info(getDomainClass())
}
def entity = getDomainClass().get(id)
}
class NewsController extends AbstractController {
def getDomainClass(){
return News
}
}