在grails域类上使用泛型时出错
我正在尝试创建一个通用抽象层次结构实现,代码如下:在grails域类上使用泛型时出错,grails,gorm,hierarchy,Grails,Gorm,Hierarchy,我正在尝试创建一个通用抽象层次结构实现,代码如下: abstract class AbstractHierarchy<T> { T parent static hasMany = [children: T] static constraints = { parent(nullable: true) } static mapping = { tablePerHierarchy false } } 所
abstract class AbstractHierarchy<T> {
T parent
static hasMany = [children: T]
static constraints = {
parent(nullable: true)
}
static mapping = {
tablePerHierarchy false
}
}
所以问题是,我做错什么了吗?grails支持这一点吗?
在搜索错误时,我找到了这个
顺便说一下,我使用的是grails 2.3.7。由于类型擦除,我希望在域模型中使用
T
的任何地方,都可以使用对象。所以从GORM的角度来看,你上面的模型相当于
abstract class AbstractHierarchy {
Object parent
static hasMany = [children: Object]
static constraints = {
parent(nullable: true)
}
static mapping = {
tablePerHierarchy false
}
}
我想这不是你想要的。因此,这个故事的寓意是:不要使用泛型来表示域类之间的关系。可以使用类型参数的上限,例如t extensed AbstractHierarchy
。然后,类型擦除将导致AbstractHierarchy父级
和static hasMany=[子级:AbstractHierarchy]
。但是我不确定你是否真的想首先创建一个这样的类。听起来太普通了。
abstract class AbstractHierarchy {
Object parent
static hasMany = [children: Object]
static constraints = {
parent(nullable: true)
}
static mapping = {
tablePerHierarchy false
}
}