Класс Scala для реализации двух интерфейсов Java - как? - PullRequest
26 голосов
/ 18 июня 2010

Я только начал изучать Scala, и теперь мне интересно, как я могу реализовать два разных интерфейса Java с одним классом Scala? Допустим, у меня есть следующие интерфейсы, написанные на Java

public interface EventRecorder {
    public void abstract record(Event event); 
}

public interface TransactionCapable {
    public void abstract commit();
}

Но класс Scala может расширять только один класс за раз. Как я могу иметь класс Scala, который мог бы выполнять оба контракта? Нужно ли отображать эти интерфейсы в черты?

Обратите внимание, что мои классы Scala будут использоваться из Java, поскольку я пытаюсь внедрить новую функциональность, написанную в Scala, в существующее приложение Java. И существующая структура ожидает, что оба интерфейсных контракта будут выполнены.

1 Ответ

45 голосов
/ 18 июня 2010

Второй интерфейс может быть реализован с ключевым словом with

class ImplementingClass extends EventRecorder with TransactionCapable {
  def record(event: Event) {}
  def commit() {}
}

Далее каждый последующий интерфейс отделяется ключевым словом with.

class Clazz extends InterfaceA
  with InterfaceB
  with InterfaceC {
  //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...