我正在尝试使用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"
}
}
但是,如果我删除特征var compressionCodecFactory1: CompressionCodecFactory = _
中的foo
或将其注释掉,它将完美地编译和腌制。我还尝试将@transient
表示法添加到此var中,但是编译失败并出现相同的错误。
为什么这可能会发生?
编辑:
如果我将var compressionCodecFactory1: CompressionCodecFactory = _
更改为val compressionCodecFactory1: CompressionCodecFactory = null
或def compressionCodecFactory1: CompressionCodecFactory = _
,则编译成功。