具有泛型类型问题的Avro序列化

时间:2018-02-22 12:28:30

标签: scala generics avro avro4s

我需要在Scala中编写一个函数,它返回一个用AvroOutputStream序列化的字节数组,但是在scala中,我无法获得传入输入的通用对象的类。 这是我的util类:

class AvroUtils {

    def createByteArray[T](obj: T): Array[Byte] = {
        val byteArrayStream = new ByteArrayOutputStream()
        val output = AvroOutputStream.binary[T](byteArrayStream)
        output.write(obj)
        output.close()
        byteArrayStream.toByteArray()
    }
}

正如您所看到的,如果测试此代码,AvroOutputStream无法识别T类,因此无法为其生成架构。 希望你能帮忙!感谢

PS:已经尝试使用TypeTag和ClassTag,没有任何作用。

1 个答案:

答案 0 :(得分:1)

您需要为T添加正确的含义,即SchemaForToRecord

def createByteArray[T : SchemaFor : ToRecord](obj: T): Array[Byte] = {
  val byteArrayStream = new ByteArrayOutputStream()
  val output = AvroOutputStream.binary[T](byteArrayStream)
  output.write(obj)
  output.close()
  byteArrayStream.toByteArray()
}