2010-06-18 17 views
23

Acabo de empezar a aprender Scala y ahora me pregunto cómo podría implementar dos interfaces Java diferentes con una clase Scala. Supongamos que tengo las siguientes interfaces escritas en JavaClase Scala para implementar dos interfaces Java, ¿cómo?

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

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

Pero una clase Scala solo puede extender una clase por vez. ¿Cómo puedo tener una clase Scala que pueda cumplir ambos contratos? ¿Debo mapear esas interfaces en rasgos?

Tenga en cuenta que mis clases de Scala se usarán desde Java, ya que estoy intentando inyectar una nueva funcionalidad escrita en Scala en una aplicación Java existente. Y el marco existente espera que ambos contratos de interfaz se cumplan.

Respuesta

39

La segunda interfaz puede implementarse con la palabra clave with

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

Además en cada interfaz posterior se separa con la palabra clave with.

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

Gracias! De hecho, lo intenté, pero IntelliJ arrojó un vago error de sintaxis. Tengo que intentarlo de nuevo y ver si el proyecto fue configurado incorrectamente. – puudeli

+0

¿Debería mencionarse que las interfaces subsiguientes están separadas por la palabra clave 'con'? P.ej. 'x extiende y con z con q'. –

+0

¡Gracias, hecho! –

Cuestiones relacionadas