6.6 Referenciando construtores



This content originally appeared on DEV Community and was authored by FUNDAMENTOS JAVA

Uso de method reference com construtores:

Assim como métodos estáticos, podemos referenciar construtores usando new:

Usuario rodrigo = Usuario::new; // ERRO!

Esse código não compila porque Usuario não é uma interface funcional.

Utilizando Supplier para construtor sem argumentos:

A interface funcional Supplier é usada para criar objetos sem argumentos:

Supplier<Usuario> criadorDeUsuarios = Usuario::new;
Usuario novo = criadorDeUsuarios.get();

O método get() é chamado para instanciar um novo objeto.

Criando instâncias com argumento usando Function:

Para construtores que recebem um argumento, usamos Function:

Function<String, Usuario> criadorDeUsuarios = Usuario::new;
Usuario rodrigo = criadorDeUsuarios.apply("Rodrigo Turini");
Usuario paulo = criadorDeUsuarios.apply("Paulo Silveira");

O método apply() recebe o argumento e cria o objeto.

Criando instâncias com dois argumentos usando BiFunction:
Para construtores com dois parâmetros, usamos BiFunction:

BiFunction<String, Integer, Usuario> criadorDeUsuarios = Usuario::new;
Usuario rodrigo = criadorDeUsuarios.apply("Rodrigo Turini", 50);
Usuario paulo = criadorDeUsuarios.apply("Paulo Silveira", 300);

apply(arg1, arg2) é usado para passar os dois argumentos.

Construtores com mais de dois argumentos:

O Java não fornece interfaces funcionais para mais de dois parâmetros.
Se necessário, podemos criar uma interface funcional personalizada, como TriFunction.

Conclusão:
Method references podem ser usados para instanciar objetos via construtores.
Interfaces como Supplier, Function e BiFunction ajudam a referenciar construtores com diferentes quantidades de argumentos.
Para mais de dois parâmetros, é necessário criar uma interface funcional personalizada.

Referenciandooconstrutorde um Array

consigo usar constructor reference com um array, mas neste
casoasintaxevaim u d a r umpouco. Bastaadicionaroscolchetesdoarray
antes do delimitador ::, porexemplo: int[]::new.


This content originally appeared on DEV Community and was authored by FUNDAMENTOS JAVA