向属性添加自定义访问器,而不重命名Scala中的构造函数参数

向属性添加自定义访问器,而不重命名Scala中的构造函数参数,scala,Scala,例如,我有以下课程 class Person(val name: String) { } 有些代码使用此类调用带有命名参数的构造函数 val person = new Person(name = "Smith") println(person.name) 我需要为属性名添加一个自定义访问器,而不需要上面的代码。所以重命名构造函数参数的方法不适合我 class Person(val _name: String) { def name = { println("custom acti

例如,我有以下课程

class Person(val name: String) { }
有些代码使用此类调用带有命名参数的构造函数

val person = new Person(name = "Smith")
println(person.name)
我需要为属性名添加一个自定义访问器,而不需要上面的代码。所以重命名构造函数参数的方法不适合我

class Person(val _name: String) {
  def name = {
    println("custom action")
    _name
  }
}

还有别的办法吗?如果否,是否意味着对于新类,我总是应该手动创建自定义访问器以确保封装?

您可以将主构造函数设置为私有,并向其添加一些额外的值以防止歧义

class Person private (_name: String, dummy: Unit) {
  def this(name: String) = this(name, ())
  def name: String = {
    println("custom action")
    _name
  }
}

new Person(name = "John").name // will print "custom action"

它有点黑,但我更喜欢它,而不是Java-maybe-I-need-It-later样式的访问器

您可以将主构造函数设置为私有,并为其添加一些额外的值以防止歧义

class Person private (_name: String, dummy: Unit) {
  def this(name: String) = this(name, ())
  def name: String = {
    println("custom action")
    _name
  }
}

new Person(name = "John").name // will print "custom action"
这是一个黑客程序,但我更喜欢它,而不是Java-maybe-I-need-It-later样式的访问器