Scala: назначение свойств класса с помощью альтернативных конструкторов - PullRequest
0 голосов
/ 21 мая 2018

У меня есть класс со свойством, которое заполняется конструктором, но мне нужно, чтобы оно заполнялось по-другому, когда вызывается альтернативный конструктор.Например, я хочу, чтобы код был примерно таким:

class MyClass(someArg: String) {
  val someValue = valuePopulator(someArg)

  def this(someArg1: String, someArg2: String) {
    someValue = alternateValuePopulator(someArg1, someArg2)
  }
  def valuePopulator(arg: String) {
  \\ does something
  }
  def alternateValuePopulator(arg: String, arg2: String) {
  \\ does something else
  }
}

Конечно, это не работает, но в основном я хочу, чтобы someValue равнялся выводу valuePopulator, когда класс создается нормально,Однако someValue должен быть результатом alternateValuePopulator при вызове альтернативного конструктора.Как я могу создать свойства класса, которые заполняются конструктором способом, который зависит от того, какой конструктор вызывается?

1 Ответ

0 голосов
/ 21 мая 2018

Общий знаменатель между двумя конструкторами, по-видимому, является основным конструктором, который принимает someValue напрямую:

class MyClass private (val someValue: SomeValueType) {

  def this(someArg: String) {
    this(valuePopulator(someArg))
  }

  def this(someArg1: String, someArg2: String): SomeValueType = {
    this(alternateValuePopulator(someArg1, someArg2))
  }

  def valuePopulator(arg: String) {
  \\ does something
  }
  def alternateValuePopulator(arg: String, arg2: String): SomeValueType = {
  \\ does something else
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...