Необязательный конструктор задачи Scala - PullRequest
7 голосов
/ 26 августа 2011

Представьте себе этот простой кусок кода:

    class Constructor() {
  var string: String = _

  def this(s: String) = {this() ; string = s;}

  def testMethod() {
    println(string)
  }

  testMethod
}

object Appl {
  def main(args: Array[String]): Unit = {
    var constructor = new Constructor("calling elvis")
    constructor = new Constructor()
 }
}

Результат

null
null

Я бы хотел быть

calling elvis
null

Как этого добиться? Я не могу вызвать метод testMethod после создания объекта.

Мазь

1 Ответ

19 голосов
/ 26 августа 2011

Ваш метод теста вызывается в главном конструкторе первым делом.Ни один другой конструктор не сможет избежать его вызова до запуска собственного кода.

В вашем случае вы должны просто поменять, какой конструктор что делает.У главного конструктора должен быть строковый параметр, а у вспомогательного - нулевой.Дополнительный выигрыш, вы можете объявить var непосредственно в списке параметров.

class Constructor(var s: String) {
  def this() = this(null)
  def testMethod() = println(s)   
  testMethod()
}

В общем случае главный конструктор должен быть более гибким, обычно назначая каждое поле из параметра.Синтаксис Scala делает это очень просто.Вы можете сделать этот главный конструктор приватным, если это необходимо.

Редактировать : еще проще с параметром по умолчанию

class Constructor(var s: String = null) {
   def testMethod = println(s)
   testMethod
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...