¿Cómo la interfaz funcional que trabaja en java 8

Mallikarjun:

Este es un ejemplo me encontré mientras se estudia el concepto de interfaz funcional.

interface Sayable{  
   void say();  
}  
public class MethodReference {  
    public static void saySomething(){  
        System.out.println("Hello, this is static method.");  
    }  
    public static void main(String[] args) {  
        // Referring static method  
        Sayable sayable = MethodReference::saySomething;  
        // Calling interface method  
        sayable.say();  
    }  
} 

Esta es la impresión "Hola, este es el método estático." en la producción cuando se ejecuta. Mi pregunta cómo se está imprimiendo la salida cuando llamamos al método digamos () (que no está implementado)

MC emperador:

Se puede pensar en la referencia al método de esta manera:

Sayable sayable = new Sayable() {

    @Override
    void say() {
        // Grab the body of the method referenced by the method reference,
        // which is the following:
        System.out.println("Hello, this is static method.");
    }
}

La referencia método es válido porque

  • el tipo de destino es la interfaz funcional Sayable (que está tratando de almacenar el resultado en un Sayabletipo); y
  • la firma de la referencia método para saySomething()coincide con el método funcional de interfaz say(), es decir, los parámetros y el tipo de retorno de los partidos 1 .

La aplicación de la say()método de la Sayableinstancia denomina la variable sayablees igual a la del cuerpo del método, el método de referencia se refiere a.

Así que, como dice JB Nizet en los comentarios, say()en realidad está implementado.


1 Un pequeño detalle: la palabra 'partido' no significa exactamente 'son iguales'. Por ejemplo, si saySomething()ha devuelto un int, no por ello deja de trabajo, aunque sólo el método del tipo de destino define el tipo de retorno para ser void.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=208283&siteId=1
Recomendado
Clasificación