我正在尝试使用scala-pickling 0.10.1和Scala 2.11将对象序列化为JSON,但是我遇到了一个非常奇怪的问题 . 我复制了下面的一个最小例子:
import org.apache.hadoop.io.compress.CompressionCodecFactory
import scala.pickling.Defaults._
import scala.pickling.json._
trait foo {
var compressionCodecFactory1: CompressionCodecFactory = _
val compressionCodecFactory2: CompressionCodecFactory = null
}
class blah extends foo
object FooFoo {
def main(args: Array[String]) = {
val k = new blah
val pkl = k.pickle // compilation fails with error "Cannot generate a pickler for blah"
}
}
但是,如果我在特征 foo
中删除或注释 var compressionCodecFactory1: CompressionCodecFactory = _
,它会完美地编译和腌制 . 我也尝试将 @transient
表示法添加到此var中,但编译失败并出现相同的错误 .
为什么会发生这种情况?
编辑:如果我将 var compressionCodecFactory1: CompressionCodecFactory = _
更改为 val compressionCodecFactory1: CompressionCodecFactory = null
或 def compressionCodecFactory1: CompressionCodecFactory = _
,编译成功 .