在Avro4s中,匿名函数的参数类型必须完全确定,否则会出现编译错误。解决这个问题的方法是使用类型推断或显式指定参数类型。
以下是两种解决方法的示例代码:
import com.sksamuel.avro4s._
case class Person(name: String, age: Int)
val schema = AvroSchema[Person]
val anonymousFunc = (p: Person) => println(p)
val writer = new ReflectDatumWriter[Person](schema)
val outputStream = new ByteArrayOutputStream()
val encoder = EncoderFactory.get().binaryEncoder(outputStream, null)
writer.write(anonymousFunc, encoder)
encoder.flush()
val bytes = outputStream.toByteArray()
val reader = new ReflectDatumReader[Person](schema)
val decoder = DecoderFactory.get().binaryDecoder(bytes, null)
val result = reader.read(null, decoder)
import com.sksamuel.avro4s._
case class Person(name: String, age: Int)
val schema = AvroSchema[Person]
val anonymousFunc = (p: Person) => println(p)
val writer = new ReflectDatumWriter[Person](schema)
val outputStream = new ByteArrayOutputStream()
val encoder = EncoderFactory.get().binaryEncoder(outputStream, null)
writer.write(anonymousFunc.asInstanceOf[Person => Unit], encoder)
encoder.flush()
val bytes = outputStream.toByteArray()
val reader = new ReflectDatumReader[Person](schema)
val decoder = DecoderFactory.get().binaryDecoder(bytes, null)
val result = reader.read(null, decoder)
这两种方法都可以解决匿名函数参数类型必须完全确定的问题。