我正在尝试使用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 = nulldef compressionCodecFactory1: CompressionCodecFactory = _ ,编译成功 .