Java referencia 8 Método: cómo determinar el método para tomar?

Mulgard:

Digamos que tenemos la siguiente clase:

public class NameCreator {

    public String createName(String lastname) {
        return lastname;
    }

    public String createName(String lastname, String firstName) {
        return lastname + " " + firstname
    }

    ...
}

Si yo quiero llamarlo a través de Java referencia 8 Método:

NameCreator::createName

Voy a obtener el error:

Cannot resolve method createName

¿Cómo puedo definir cuál de esos métodos que quieres ser llamado?

Miguel :

NameCreator::createNameimplica que o bien el método es estático (tipo # 1 en la tabla de abajo), o que el objetivo de la interface funcional también toma una instancia de la clase (tipo # 3, por ejemplo
BiFunction<NameCreator, String, String>). Sus métodos no son estáticas, y así, presumiblemente, su objetivo no toma una instancia, por lo que se obtiene el error "No se puede método de determinación". Es posible que desee utilizar la referencia al método en una instancia (tipo # 2). Desde dentro de la clase, puede utilizar:

Function<String, String> func = this::createName

Desde fuera de la clase que puede utilizar:

NameCreator creator = new NameCreator();
Function<String, String> func = creator::createName;

En cuanto a si se utiliza la versión de una o de dos parámetros, que depende de qué está siendo dirigido interfaz funcional. Lo anterior va a utilizar su primer método, ya que Function<String, String>toma una cadena y devuelve una cadena. La siguiente interfaz funcional, como un ejemplo, sería utilizar su segundo método:

NameCreator creator = new NameCreator();
BiFunction<String, String, String> func = creator::createName;

Ver: Function, BiFunction, y todo el java.util.functionpaquete

Usted también puede estar interesado en el tutorial de Java en referencias de métodos , en concreto esta parte:


Hay cuatro tipos de referencias de métodos:

Kind                                                   | Example
==============================================================================================
Reference to a static method                           | ContainingClass::staticMethodName
-------------------------------------------------------+--------------------------------------
Reference to an instance method of a particular object | containingObject::instanceMethodName
-------------------------------------------------------+--------------------------------------
Reference to an instance method of an arbitrary object | ContainingType::methodName
of a particular type                                   |
-------------------------------------------------------+--------------------------------------
Reference to a constructor                             | ClassName::new
==============================================================================================

Supongo que te gusta

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