在Scala中:我想定义一个Message [T]类型(它需要具有此签名),它可以是一个包含某些T类型数据的消息,也可以是一个隐式消息。我有
trait Message[T]
case object ImplicitMessage extends Message <- obviously doesn't compile
case class DataMessage[T](d: T) extends Message[T]
我应该如何定义ImplicitMessage?我可以将其设置为case类,但这显然不是那么好,因为它只需要一个实例。
更新:我知道我可以简单地从消息中删除[T],但是我不能(要求)。
最佳答案
您可以使用Nothing
,如下所示:
case object ImplicitMessage extends Message[Nothing]
Nothing
是一种特殊类型,它是所有可能类型的子类型,并且没有实例。如果由于
Message[T]
而遇到方差问题,则可以使用以下技巧:object ImplicitMessage extends Message[Nothing] {
def apply[T]: Message[T] = this.asInstanceOf[Message[T]]
}
scala> ImplicitMessage[String]
res1: Message[String] = ImplicitMessage$@4ddf95b5
scala> ImplicitMessage[Long]
res2: Message[Long] = ImplicitMessage$@4ddf95b5
关于scala - 通用特征的案例对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15599663/