Scala Avro4s通用toByteArray/fromByteArray

Scala Avro4s通用toByteArray/fromByteArray,scala,scala-macros,scala-reflect,scala-generics,avro4s,Scala,Scala Macros,Scala Reflect,Scala Generics,Avro4s,我对Avro4s的toByteArray/fromByteArray函数的通用版本有问题 我找到了这个 这是我的作品: def fromByteArray[A: SchemaFor : FromRecord](bytes: Array[Byte]): Option[A] = { val in: ByteArrayInputStream = new ByteArrayInputStream(bytes) val input: AvroBinaryInputStream[A] = A

我对Avro4s的toByteArray/fromByteArray函数的通用版本有问题

我找到了这个

这是我的作品:

def fromByteArray[A: SchemaFor : FromRecord](bytes: Array[Byte]): Option[A] = {
    val in: ByteArrayInputStream = new ByteArrayInputStream(bytes)
    val input: AvroBinaryInputStream[A] = AvroInputStream.binary[A](in)
    val result: Option[A] = input.iterator.toSeq.headOption
    input.close()
    result
  }
但事实并非如此

def toByteArray[T : SchemaFor : FromRecord](obj: T): Array[Byte] = {
    val byteArrayStream = new ByteArrayOutputStream()
    val output = AvroOutputStream.binary[T](byteArrayStream)
    output.write(obj)
    output.close()
    byteArrayStream.toByteArray
  }
它引发编译异常:

错误:(48,44)找不到参数的证据的隐式值 键入com.sksamuel.avro4s.ToRecord[T] val output=AvroOutputStream.binaryT错误:(48,44)方法binary的参数不足:(隐式 证据$23:com.sksamuel.avro4s.SchemaFor[T],隐含证据$24: com.sksamuel.avro4s.ToRecord[T])com.sksamuel.avro4s.avrobinayoutputstream[T]。 未指定值参数证据$24。 val输出=AvroOutputStream.binaryT

我做错了什么

upd 愚蠢的错误

def toByteArray[T : SchemaFor : FromRecord](obj: T): Array[Byte] ...
一定是

def createByteArray[T : SchemaFor : ToRecord](obj: T): Array[Byte] ...
:D

尚未解决的问题

如果类的某个字段是AnyRef

val output = AvroOutputStream.binary[T](byteArrayStream)

未能使用编译:找不到…的隐式SchemaFor。

谢谢提醒。更新了答案。无法为
AnyRef
生成架构,因为它可能是无限多个子类型之一。