0

在 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 必须是抽象的,因为方法更新没有定义。

我做错了什么?我敢肯定,我错过了一些微妙之处。如果已经有类似的问题,我很抱歉,但我想不出要搜索什么,我已经不高兴地检查了类似问题的列表。

4

1 回答 1

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
}
于 2013-06-03T16:13:05.860 回答