我对Scala很新,我正试图在Lift中使用lift-squeryl-record。 Scala是2.8.1,Lift是2.3。我的问题是我想使用Record中的(Mega)ProtoUser,但它与lift-squeryl-record冲突。
我遵循了以下指示:
没有使用ProtoUser,并试图像这样定义我的用户:
trait AbstractUser[MyType <: AbstractUser[MyType]] extends
ProtoUser[MyType] with Record[MyType] with KeyedRecord[Long] {
注意:KeyedRecord来自包net.liftweb.squerylrecord,而不是net.liftweb.record
然后我收到以下错误:
overriding lazy value id in trait ProtoUser of type net.liftweb.record.field.LongField[MyType]; method id in trait KeyedRecord of type => Long needs
覆盖'修饰符`
因为KeyedRecord和ProtoUser都定义了不同的id方法。由于我不控制类/特征的代码,是否有任何“Scala”方法,比如重命名其中一个方法?我真的不想在两者之间做出选择。 :(
答案 0 :(得分:3)
不,你不能重命名子类中的方法。如果父类型中存在两个冲突的方法签名,则需要求助于另一种模式,例如通过委派(http://en.wikipedia.org/wiki/Delegation_pattern)
的间接方式trait AbstractUser[MyType <: AbstractUser[MyType]] extends ProtoUser[MyType] {
def record: Record[MyType] with KeyedRecord[Long]
}