gpt4 book ai didi

scala - 通用 trait 的 case 对象

转载 作者:行者123 更新时间:2023-12-04 15:12:58 25 4
gpt4 key购买 nike

在 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?我可以让它成为一个案例类,但这显然不是那么好,因为它只需要它的一个实例。

更新:我知道我可以简单地从 Message 中删除 [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 - 通用 trait 的 case 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15599663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com