DEV Community

Referências de construtor

  • A referência a um construtor usa a sintaxe: nomeclasse::new.

  • Pode ser atribuída a uma interface funcional que tenha um método compatível com o construtor.

Exemplo com Construtor Parametrizado

  • Se a interface funcional tem um método com um parâmetro, a referência será associada ao construtor com esse parâmetro.

MyFunc myClassCons = MyClass::new;
MyClass mc = myClassCons.func("Testing");

  • Aqui, MyClass(String s) é o construtor referenciado.

Exemplo com Construtor Padrão

  • Para referenciar o construtor sem parâmetros, é necessário usar uma interface funcional cujo método também não tenha parâmetros.

MyFunc2 myClassCons = MyClass::new;
MyClass mc = myClassCons.func();

Uso com Classes Genéricas

  • Para classes genéricas, pode-se especificar o tipo no momento da criação da referência.

MyGenClass<Integer>::new;

  • Graças à inferência de tipos, a especificação nem sempre é obrigatória.

Inferência de Tipos

  • A referência ao construtor seleciona automaticamente o que mais se adapta ao método da interface funcional.

// Demonstra uma referência de constructor.
// MyFunc é uma interface funcional cujo método retorna
// uma referência MyClass.
interface MyFunc {
MyClass func(String s);
}
class MyClass {
private String str;
// Este construtor recebe um argumento.
MyClass(String s) { str = s; }
// Este é o construtor padrão.
MyClass() { str = ""; }
// ...
String getStr() { return str; }
}
class ConstructorRefDemo {
public static void main(String args[])
{
// Cria uma referência ao construtor de MyClass.
// Já que o método func() de MyFunc recebe um argumento,
// new referencia o construtor parametrizado de MyClass
// e não o construtor padrão.
MyFunc myClassCons = MyClass::new; Uma referência de construtor
// Cria uma instância de MyClass usando essa referência de construtor.
MyClass mc = myClassCons.func("Testing");
// Usa a instância de MyClass recém criada.
System.out.println("str in mc is " + mc.getStr( ));
}
}

Top comments (0)