Lo que se entiende por tipo de destino lambda y el contexto tipo de destino en Java?

John Allison:

Estoy leyendo un capítulo sobre lambdas en Herbert Schildt de "Java: The Complete Reference" y hay bastantes referencias a "lambda tipo de destino" y "contexto tipo de destino":

Una interfaz funcional define el tipo de destino de una expresión lambda. Aquí es un punto clave: una expresión lambda sólo se puede utilizar en un contexto en el que su tipo de destino se especifica.

O:

Como se mencionó anteriormente, una expresión lambda no se ejecuta por sí mismo. Más bien, se forma la implementación del método abstracta definida por la interfaz funcional que especifica su tipo de destino . Como resultado, una expresión lambda sólo se puede especificar en un contexto en el que un tipo de objetivo está definido. Uno de estos contextos se crea cuando una expresión lambda es asignado a una referencia de interfaz funcional. Otros contextos tipo de destino incluyen la inicialización de variables, sentencias de retorno, y los argumentos del método, para nombrar unos pocos.

Aún otra:

La interfaz funcional asociado con una expresión lambda puede ser genérico. En este caso, el tipo de destino de la expresión lambda se determina, en parte, por el argumento de tipo o argumentos especificados cuando se declara una referencia de interfaz funcional.

Por favor alguien puede ayudarme a entender lo que se entiende por tipo de destino lambda?

Por ejemplo, en (int n) -> n % 2 == 0es inttipo de destino de la lambda?

O en:

interface MyInterface<T> {
    T func();
}

MyInterface<String> myInt = () -> { return "123"; }

¿Cuál es el tipo de objetivo de la lambda? ¿Es Stringo MyInterface<String>? Y lo que es el contexto de la lambda aquí?

He leído varias funciones en SO sobre el tema, pero todavía no puedo entender completamente las nociones.

Gracias.

Eran :

Una de las definiciones de "diana" (tomado de aquí ) es:

resultado o situación que tiene la intención de lograr.

Se puede decir que el resultado de una expresión lambda tiene la intención de lograr es poner en práctica alguna de las interfaces funcionales. Por lo tanto esa interfaz funcional puede ser visto como el objetivo de que la expresión de lambda, y el tipo de la interfaz funcional es el tipo de destino.

Por lo tanto el tipo de destino es el tipo de la interfaz funcional implementada por la expresión lambda.

El tipo de destino puede inferirse basándose en el contexto en el que la expresión lambda se utiliza:

  1. Si la expresión lambda se asigna a una variable de referencia interfaz funcional, el tipo de esa variable es el tipo de destino.
  2. Si la expresión lambda es devuelto por algún método, el tipo de retorno del método es el tipo de destino.
  3. Si la expresión lambda se pasa como argumento a un método, el tipo del argumento correspondiente esperado por el método es el tipo de destino.

En

(int n) -> n % 2 == 0

el tipo de destino es desconocido. Si se asigna a esta expresión alguna referencia interfaz funcional, que sería el tipo de destino.

En

MyInterface<String> myInt = () -> { return "123"; }

el tipo de destino es MyInterface<String>.

Supongo que te gusta

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