Наследование Scala от класса Java: выберите, какой суперструктор вызывать - PullRequest
19 голосов
/ 26 июля 2010

У меня есть несколько конструкторов в классе Java.

public class A{
  public A(){...}
  public A(String param){...}
  public A(String param, Object value}
}

Теперь я хочу создать класс Scala, который наследуется от этого класса

class B extends A{
  super("abc")
}

Но этот синтаксис недействителен. Скала жалуется, что '.' expected but '(' found.

Каков правильный способ сделать это?

Ответы [ 2 ]

29 голосов
/ 27 июля 2010

Как говорит Мориц, вы должны указывать аргументы конструктора непосредственно в определении класса.Кроме того, вы можете использовать вторичные конструкторы таким образом:

class B(a:String, b:String) extends A(a,b) {
  def this(a:String) = this(a, "some default")
  def this(num:Int) = this(num.toString)
}

Но вы должны ссылаться на this, super невозможно.

27 голосов
/ 26 июля 2010

Вы должны добавить аргументы конструктора к определению класса следующим образом:

class B extends A("abc")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...