У меня есть два класса Scala, которые выглядят так (перефразировано):
abstract class GenericParser[T] {
val lineFilter : String => Boolean
parseData()
def parseData() : T {
for( line <- .... if lineFilter(line) )
// do things
}
}
class SalesParser extends GenericParser[SalesRow] {
val lineFilter = line => !line.startsWith("//")
// ....
}
Проблема в том, что lineFilter
равно null
в parseData
, возможно потому, что parseData
вызывается, когда основной конструктор GenericParser
все еще работает, поэтому подкласс не полностью инициализировал свои члены. *
Я могу обойти это, сделав lineFilter def
вместо val
, но это ожидаемое поведение? Не кажется правильным, что эта проблема должна стать очевидной только после получения NPE во время выполнения.