31 votes

Classe Scala pour implémenter deux interfaces Java - comment ?

Je viens de commencer à apprendre Scala et je me demande maintenant comment je pourrais implémenter deux interfaces Java différentes avec une classe Scala ? Disons que j'ai les interfaces suivantes écrites en Java

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

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

Mais une classe Scala ne peut étendre qu'une seule classe à la fois. Comment puis-je avoir une classe Scala qui pourrait remplir les deux contrats ? Dois-je transformer ces interfaces en traits ?

Remarque : mes classes Scala seraient utilisées à partir de Java, car j'essaie d'injecter une nouvelle fonctionnalité écrite en Scala dans une application Java existante. Et le cadre existant s'attend à ce que les deux contrats d'interface soient remplis.

51voto

michael.kebe Points 5723

La deuxième interface peut être implémentée avec le with mot-clé

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

Plus loin, chaque interface suivante est séparée par le mot-clé with .

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X