令人尴尬的基本 - 将Class中的字段初始化为null - Scala

Aru*_*nan 0 scala

试图拿起Scala,我正在转换一个小型Java项目.

我有这样的bean类.目标是有两个字段,getter和setter与它一起使用.对于Numbers或者String,我知道我们可以用'0'或空字符串初始化它.但是,对于类,我不知道用什么来初始化它.据我所知,nullScala对此不以为然.

class CoreSearchPageResultS extends Serializable {

  var wikiHits: SearchResult[WikiSearchHit]=null
  var webHits: SearchResult[WebSearchHit]=null


}
Run Code Online (Sandbox Code Playgroud)

相反,我应该像这样初始化它吗?

var wikiHits: SearchResult[WikiSearchHit]=new SearchResult[WikiSearchHit]();
var webHits: SearchResult[WebSearchHit]=new SearchResult[WebSearchHit]();
Run Code Online (Sandbox Code Playgroud)

我理解这意味着在构造函数完成时,构造对象是不必要的.

我尝试了以下代替但是我收到了编译错误.

private var _wikiHits: SearchResult[WikiSearchHit]

def wikiHits:SearchResult[WikiSearchHit]=_wikiHits
def wikiHits_(wikiHits:SearchResult[WikiSearchHit])=_wikiHits=wikiHits
Run Code Online (Sandbox Code Playgroud)

错误:

*类CoreSearchPageResultS需要是抽象的,因为未定义变量_wikiHits [ERROR](注意变量需要初始化才能定义)*

我知道我正在做一些非常愚蠢和令人尴尬的事情.请帮忙.

Jes*_*per 8

据我所知,nullScala对此不以为然.

确实.null实际上只存在与Java的互操作性; 不要将它用于本机Scala代码.

使用Option代替的事物,可选地具有价值.Option有两个具体的子类,SomeNone.例如:

var wikiHits: Option[SearchResult[WikiSearchHit]] = None
Run Code Online (Sandbox Code Playgroud)

稍后的:

wikiHits = Some(getSearchResult())
Run Code Online (Sandbox Code Playgroud)

然后,您可以进行模式匹配,或使用for理解,或使用其他方法Option:

wikiHits match {
  case Some(result) => println("Result: " + result)
  case None => println("No result!")
}
Run Code Online (Sandbox Code Playgroud)