Я пытаюсь сериализовать объект в JSON, используя scala-pickling 0.10.1 и Scala 2.11, но у меня очень странная проблема. Я воспроизвел минимальный пример ниже:
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
к этой переменной, но компиляция не удалась с той же ошибкой.
Почему это могло произойти?
Edit:
Если я изменю var compressionCodecFactory1: CompressionCodecFactory = _
на val compressionCodecFactory1: CompressionCodecFactory = null
или def compressionCodecFactory1: CompressionCodecFactory = _
, компиляция завершится успешно.