我正在尝试创建一个具有参数“值”和“尺寸”的类大鼠。 Rat具有成员“ fitness”。我希望此成员由构造函数初始化,但是声明此成员将强制将其显式实例化。
这是具有成员适应性的班级大鼠。我已经声明但未定义成员,因为我想通过构造函数来获取它。
class rat(value:Int,dimensions:Int){
var fitness:Int
def rat(){
fitness=sol_fit()
}
def sol_fit():Int={
var f=value*dimensions
f
}
}
答案 0 :(得分:3)
对于一个班级,这似乎是一个非常糟糕的设计。我几乎对所有问题都提出质疑。但这很容易进行编译:只需为var
提供一个默认值即可。
var fitness:Int = _
现在它可以编译,但是fitness
的值将保持默认值(在这种情况下为0
),因为您已定义了计算适当的适应性值的方法,但从未调用过,因此{{ 1}}的值不变。
但是,实际上,为什么要经历所有rigamarole?为什么不只使用计算值初始化它呢?为什么不fitness
还是简单地var fitness:Int = sol_fit()
?
答案 1 :(得分:2)
构造函数是类声明之后的块,因此可以这样编写:
@RequestMapping(value="/post", method = RequestMethod.POST)
public ResponseEntity<String> newReport(@RequestBody String aa) {
System.out.println(aa);
return new ResponseEntity<String>("User created", HttpStatus.CREATED);
}
创建类的实例时将计算表达式class rat(value: Int, dimensions: Int) {
val fitness: Int = value*dimensions
}
,并将其作为value*dimensions
值放置在类存储器中。当访问Int
成员时,将从类内存中检索该值并返回该值;它不会被重新计算。
如果fitness
是使用fitness
而不是def
声明的,则每次访问val
时都会计算表达式 。< / p>
如果已使用fitness
声明了fitness
,则可以用新值替换该值,并且随后对var
的任何访问都将返回该新值。