我有一个类,我喜欢通过读取一个configfile来初始化我的var,它生成中间对象/ val,我想将它们分组并隐藏在方法中。 这是问题的最小部分 - 我用一个参数调用ctor,实际上是一个要解析的文件,而init-method生成String,实际上比这里更复杂,创建了很多中间对象:
class Foo (val i: Int) {
var s : String;
def init () {
s = "" + i
}
init ()
}
这将产生错误:class Foo needs to be abstract, since variable s is not defined
。在这个例子中,通过将String设置为“”var s = "";
很容易解决,但实际上对象比String更复杂,没有适当的Null实现。
我知道,我可以使用一个Option,它比String更复杂:
var s : Option [String] = None
def init () {
s = Some ("" + i)
}
或者我可以省去我的方法电话。使用一个选项将迫使我一遍又一遍地写一些,没有太大的好处,因为没有必要除了以我认为可能的方式初始化它。
还有另一种方法来实现我的目标吗?
答案 0 :(得分:17)
var s : Whatever = _
会将s初始化为Whatever的默认值(引用类型为null,数字为0,bools为false等)
答案 1 :(得分:17)
您应该使用以下方式执行初始化,而不是创建单独的初始化方法:
class Foo(val i: Int) {
var s: String = {
var s0 = " "
s0 += i
// do some more stuff with s0
s0
}
var dashedDate = {
val dashed = new SimpleDateFormat("yy-MM-dd")
dashed.format(updated)
}
// Initializing more than one field:
var (x, y, z) = {
var x0, y0, z0 = 0
// some calculations
(x0, y0, z0)
}
}
答案 2 :(得分:0)
老实说,你为什么要使用var?为什么不这样做:
val rootObject = readFile(filename)
这对我来说最有意义。