超类中定义的隐式转换

时间:2014-04-16 13:56:11

标签: scala

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

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

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

1 个答案:

答案 0 :(得分:1)

你可以这样做:

  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

但是,我不确定你在Message"中定义的隐式转换是什么意思? - 如果您使用示例代码更新问题,我可以尝试根据需要进行调整。