1

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

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,没有任何效果。

4

1 回答 1

1

您需要为T,即SchemaFor和添加适当的隐式ToRecord

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()
}
于 2018-02-22T12:46:11.377 回答