该类需要抽象,因为其成员未实例化

时间:2019-01-12 06:36:47

标签: scala

我正在尝试创建一个具有参数“值”和“尺寸”的类大鼠。 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 
   }
}

2 个答案:

答案 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的任何访问都将返回该新值。