Scala 超类中定义的隐式转换

Scala 超类中定义的隐式转换,scala,Scala,是否可以在为子类调用的超类中定义隐式转换 例如,假设我有一个抽象类Message,它隐式地转换为数组[Byte](只返回实例的类名)。消息被发送到只接受数组[字节]的系统 我希望在Message中定义的转换应用于该类的每个具体实现-我的消息只是标记类,因此简单的转换就足够了(我不想复制粘贴到层次结构中的每个类)您可以这样做: abstract class Message implicit def toBytes(m: Message): Array[Byte] = Array(1,2,

是否可以在为子类调用的超类中定义隐式转换

例如,假设我有一个抽象类
Message
,它隐式地转换为
数组[Byte]
(只返回实例的类名)。消息被发送到只接受
数组[字节]
的系统


我希望在
Message
中定义的转换应用于该类的每个具体实现-我的消息只是标记类,因此简单的转换就足够了(我不想复制粘贴到层次结构中的每个类)

您可以这样做:

  abstract class Message

  implicit def toBytes(m: Message): Array[Byte] = Array(1,2,3)

  class Message1 extends Message
  class Message2 extends Message

  def foo(a: Array[Byte]) = println(a(0))         //> foo: (a: Array[Byte])Unit

  foo(new Message1())                             //> 1

但是,我不确定“在消息中定义”的隐式转换是什么意思-如果您使用示例代码更新问题,我可以尝试在需要时对此进行调整。

这取决于隐式转换是如何定义的。如果它是为
T>:Message定义的,那么它应该可以工作。。。