Подтвердить что ты не робот

Scala класс для реализации двух интерфейсов Java - как?

Я только что начал изучать 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-приложение. И существующая структура ожидает, что оба интерфейса будут выполнены.

4b9b3361

Ответ 1

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

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

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

class Clazz extends InterfaceA
  with InterfaceB
  with InterfaceC {
  //...
}