Grails - 接口而不是抽象类

时间:2014-04-24 22:00:29

标签: grails interface

我想要包含"创建"和#34;修改"我所有域类中的字段,如果可能的话,我们希望采用DRY原则。我不想扩展每个课程,因为我不能再这样做了,所以相反,我试图实现一个界面。

考虑:

interface AutoTimeStamp{

  Date created
  Date modified
}

class Dog implements AutoTimeStamp{
  String breed
}

class Cat implements AutoTimeStamp{
  String noOfLives
}

但是当我尝试创造一只新的狗或猫时,我得到了:

  

无法设置已创建的属性'因为支持领域是   最终

为什么这似乎是非法的任何想法?这就像一个扩展阶级的魅力。

3 个答案:

答案 0 :(得分:1)

默认情况下,

dateCreatedlastUpdated在域类中可用。

如果您要停用 autoTimestamp ,请使用:

static mapping = {
    autoTimestamp false
}

答案 1 :(得分:1)

上述答案是正确的,以定义一个具有您需要执行的属性的接口:

interface AutoTimeStamp{

   Date getCreated()
   void setCreated(Date created)
   Date getModified()
   void setModified(Date modified)
}

然后在实现类中,您可以定义属性

Date created
Date modified

答案 2 :(得分:0)

你不应该忘记Groovy接口遵循与Java接口相同的理念。对于Groovy接口中的每个属性都是如此:

PropertyType propertyName

表示:

public static final PropertyType propertyName

你也可以看看这里,请看看Guillaume Laforge的帖子;)

http://groovy.329449.n5.nabble.com/RFE-interface-properties-td386038.html