2010-06-18 5 views
23

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 JavaClasse Scala pour implémenter deux interfaces Java - comment?

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

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

Mais une classe Scala ne peut s'étendre que d'une classe à la fois. Comment puis-je avoir une classe Scala qui pourrait remplir les deux contrats? Dois-je cartographier ces interfaces en traits? Remarquez que mes classes Scala seraient utilisées à partir de Java car j'essaie d'injecter une nouvelle fonctionnalité écrite dans Scala dans une application Java existante. Et le cadre existant s'attend à ce que les deux contrats d'interface soient respectés.

Répondre

39

La seconde interface peut être mis en oeuvre avec le mot-clé with

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

outre sur chaque interface ultérieur est séparé avec le mot-clé with.

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

Merci! J'ai effectivement essayé mais IntelliJ a vomi une vague erreur de syntaxe. Je dois l'essayer encore et voir si le projet a été installé incorrectement. – puudeli

+0

Devrait-il être mentionné que les interfaces suivantes sont séparées par le mot-clé 'with'? Par exemple. 'x étend y avec z avec q'. –

+0

Merci, c'est fait! –

Questions connexes