1

对不起,但我是 Scala 的新手。我有一个抽象类和一个从抽象类继承并实现其字段的具体类。

abstract class Element {
  var name: String
  var description: String
}

class ConcreteElement (var name: String, var description: String)extends Element

这是正确的吗?是的?我有许多从抽象类 Element 继承的类。现在我想检查变量名称,我只想根据某些约束实例化名称。我把这个控件放在哪里?显然在抽象类Element中。

在 Scala 中,变量声明 var x:T 等价于声明一个 getter 函数 x 和一个 setter 函数 x_=,定义如下:

def x: T
def x_= (y: T): Unit

所以我决定以这种方式声明变量,并将我的约束放在 getter 方法名称中。

abstract class Element {    
def name: String
def name_= (y: String): Unit = {CONSTRAINT}

var description: String
}

类 ConcreteElement(变量名称:字符串,变量描述:字符串)扩展元素

这个推理正确吗?ConcreteElement 居然实现了 Element 的字段?

4

1 回答 1

1

def name_=只有当它没有被子类覆盖时,你的作品才有效。所以我想你需要final防止它被覆盖。

abstract class Element {
  protected var _name: String
  final def name: String = _name
  final def name_= (value: String) {
    if (isBadValue(value)) throw new IllegalArgumentException
    _name = value
  }
  var description: String
}
class ConcreteElement (protected var _name: String, var description: String) extends Element
于 2012-11-23T18:29:14.613 回答