在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]
Run Code Online (Sandbox Code Playgroud)
我该如何定义ImplicitMessage?我可以把它变成一个案例类,但这显然不是那么好,因为它只需要一个实例.
更新:我知道我可以简单地从消息中删除[T],但我不能(要求).
您可以使用Nothing如下所示:
case object ImplicitMessage extends Message[Nothing]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
912 次 |
| 最近记录: |