abstract class BaseActor[U: TaskUnit](master: ActorRef) extends Actor with ActorLogging {
def receive = {
..
..
case taskUnit: U => ...
}
def performTask(task: U): Future[_]
}
我的TaskUnit看起来像:
trait TaskUnit {
def status(status: String): TaskResponse[_]
}
我收到1个错误和1个警告,我需要一些建议。
我收到一条警告,说TaskUnit不接受类型参数(此错误在抽象类定义行上)
警告说抽象类型模式U未被选中,因为它是通过擦除消除的(这是针对案例taskUnit:U行)
我目前的设计有什么问题?
答案 0 :(得分:4)
你收到错误的原因很简单。你在写:
abstract class X[U: Y]
但你可能意味着这样的事情:
abstract class X[U <: Y]
这两个定义之间的差异非常显着。第二个信号表明,类型参数U应该是Y的子类型(包括Y)。但第一个是不同的东西。它被翻译成以下内容:
abstract class X[U](implicit ev: Y[U])
引入此语法是为了在scala中使用类型较少的样板类。我想你现在可以看到你的错误来源。编译器期望TaskUnit只有一个类型参数的类型:
TaskUnit[T] {
...
}
但它显然没有这样的形状。