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