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)