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-приложение. И существующая структура ожидает, что оба интерфейса будут выполнены.
Ответы
Ответ 1
Второй интерфейс может быть реализован с помощью ключевого слова with
class ImplementingClass extends EventRecorder with TransactionCapable {
def record(event: Event) {}
def commit() {}
}
Далее каждый последующий интерфейс разделяется ключевым словом with
.
class Clazz extends InterfaceA
with InterfaceB
with InterfaceC {
//...
}