试图拿起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](注意变量需要初始化才能定义)*
我知道我正在做一些非常愚蠢和令人尴尬的事情.请帮忙.
据我所知,
nullScala对此不以为然.
确实.null实际上只存在与Java的互操作性; 不要将它用于本机Scala代码.
使用Option代替的事物,可选地具有价值.Option有两个具体的子类,Some和None.例如:
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)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |