我想要包含"创建"和#34;修改"我所有域类中的字段,如果可能的话,我们希望采用DRY原则。我不想扩展每个课程,因为我不能再这样做了,所以相反,我试图实现一个界面。
考虑:
interface AutoTimeStamp{
Date created
Date modified
}
class Dog implements AutoTimeStamp{
String breed
}
class Cat implements AutoTimeStamp{
String noOfLives
}
但是当我尝试创造一只新的狗或猫时,我得到了:
无法设置已创建的属性'因为支持领域是 最终
为什么这似乎是非法的任何想法?这就像一个扩展阶级的魅力。
答案 0 :(得分:1)
dateCreated
和lastUpdated
在域类中可用。
如果您要停用 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