¿Las interfaces con los métodos de extensión virtual de Java 8 son lo mismo que los Mixins?

7

Esta publicación describe una nueva característica en Java 8 llamada métodos de extensión virtual (anteriormente llamados métodos predeterminados o métodos de defensa). En el ejemplo proporcionado, una interfaz tiene un método, que es implementado por una clase. Luego se agrega un segundo método, pero en lugar de forzar a la clase a implementar inmediatamente el nuevo método de la interfaz, se crea un "método de extensión virtual" dentro de la interfaz como una implementación de este nuevo método, por lo tanto, la clase no necesita implementar el Nuevo método de inmediato.

Pero digamos que el programador decide crear un método de extensión virtual en una interfaz y nunca planea que las subclases implementen su propia versión. ¿No sería eso una mezcla? A mí me parece que es uno, pero nunca lo he oído mencionar como tal. ¿Hay alguna diferencia fundamental que no entiendo?

    
pregunta Thunderforge 19.11.2013 - 18:43

2 respuestas

6

Sí, estos son mixins. No son tan poderosos como los rasgos de Scala (no tienen la capacidad de tener una referencia al objeto "self" principal y sus propiedades o métodos), pero los métodos predeterminados pueden implementar un comportamiento significativo y, por lo tanto, pueden ser más que pegar los yesos para dejar de existir. ruptura de código cuando se extiende una interfaz.

El poder limitado de los métodos predeterminados parece ser deliberado, a juzgar por las diversas discusiones informadas de la característica. El consejo de los diseñadores es que los métodos predeterminados generalmente no deben contener la implementación concreta de un método, sino que deben aceptar un lambda o una referencia a una clase concreta, cualquiera de los cuales puede proporcionar la implementación. Ejemplo here

    
respondido por el itsbruce 19.11.2013 - 18:56
2

Es similar a una combinación pero no es tan potente ya que una interfaz no puede contener datos.

    
respondido por el kevin cline 19.11.2013 - 18:57

Lea otras preguntas en las etiquetas