试图拿起Scala,我正在转换一个小型Java项目.
我有这样的bean类.目标是有两个字段,getter和setter与它一起使用.对于Numbers或者String
,我知道我们可以用'0'或空字符串初始化它.但是,对于类,我不知道用什么来初始化它.据我所知,null
Scala对此不以为然.
class CoreSearchPageResultS extends Serializable { var wikiHits: SearchResult[WikiSearchHit]=null var webHits: SearchResult[WebSearchHit]=null }
相反,我应该像这样初始化它吗?
var wikiHits: SearchResult[WikiSearchHit]=new SearchResult[WikiSearchHit](); var webHits: SearchResult[WebSearchHit]=new SearchResult[WebSearchHit]();
我理解这意味着在构造函数完成时,构造对象是不必要的.
我尝试了以下代替但是我收到了编译错误.
private var _wikiHits: SearchResult[WikiSearchHit] def wikiHits:SearchResult[WikiSearchHit]=_wikiHits def wikiHits_(wikiHits:SearchResult[WikiSearchHit])=_wikiHits=wikiHits
错误:
*类CoreSearchPageResultS需要是抽象的,因为未定义变量_wikiHits [ERROR](注意变量需要初始化才能定义)*
我知道我正在做一些非常愚蠢和令人尴尬的事情.请帮忙.
据我所知,
null
Scala对此不以为然.
确实.null
实际上只存在与Java的互操作性; 不要将它用于本机Scala代码.
使用Option
代替的事物,可选地具有价值.Option
有两个具体的子类,Some
和None
.例如:
var wikiHits: Option[SearchResult[WikiSearchHit]] = None
稍后的:
wikiHits = Some(getSearchResult())
然后,您可以进行模式匹配,或使用for
理解,或使用其他方法Option
:
wikiHits match { case Some(result) => println("Result: " + result) case None => println("No result!") }