在Scala中,我试图生成一组通用的检查来运行某些数据。
我的基本特征看起来像这样:
trait Check[T]
{
def complete() : Boolean = ...
def passed() : Boolean = ...
def update[T]( data : T ) : Unit
}
然后我有两个看起来有点像这样的子特征:
trait CheckFoo extends Check[Foo]{ val baz = 1 }
trait CheckBar extends Check[Bar]{ val baz = 2 }
旨在避免我在每个Foo和Bar检查中定义baz。
然后我得到了一些实际的Foo检查,例如
class CheckFooOne extends CheckFoo
{
def update( data : Foo ) : Unit = ...
}
但是这并没有编译:它告诉我CheckFooOne必须是抽象的,因为没有定义方法更新。
我做错了什么?我确定有一些我错过的微妙之处。我很抱歉,如果还有其他类似的问题,但我无法想到要搜索的内容,而且我已经毫无欢乐地查看了类似问题的列表。
答案 0 :(得分:5)
您的update
方法使用类型T
进行参数化,该类型恰好与您班级的类型参数同名。
你的特质Check
等同于:
trait Check[T]
{
def complete() : Boolean = ...
def passed() : Boolean = ...
def update[U]( data : U ) : Unit
}
你可能想要这个:
trait Check[T]
{
def complete() : Boolean = ...
def passed() : Boolean = ...
def update( data : T ) : Unit
}