Groovy抽象控制器<domain class =“”> </domain>

时间:2013-05-09 18:04:13

标签: java grails

尴尬,但我找不到我的方式错误。无论我尝试什么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
    }
}

请保持温柔,这感觉像是一个大脑屁/一些愚蠢的东西。

2 个答案:

答案 0 :(得分:1)

我会说Type Erasure(或它的groovy等价物)。

因此M仅用于编译时检查(至少在java中)。现在,如何使用解释性语言更有趣,但我认为你很可能是相关环境的受害者。

似乎groovy有更严格的要求完全丢弃来自源的通用信息。这可能会在运行时产生一些有趣的行为。

http://groovy.codehaus.org/Generics

答案 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
    }
 }