Saudações!
Vou explicar detalhadamente o processo de como criar uma instância diretamente no argumento da chamada de um método.
A interface:
//Apenas a interface
public interface Ex1Foo {
// Apenas o método da interface
void metodoDaInterface();
}
A classe que chama a interface no argumento do método doStuff()
public class Ex1Bar {
// Método que recebe como parâmetro a Interface Ex1Foo
void doStuff(Ex1Foo f) {
System.out.println("LOL");
// Recebendo a interface como parâmetro posso manipulá-la do jeito que
// foi declarado no método
// Ex1MyWonderfulClass
f.metodoDaInterface();
}
}
A classe em que os processos acontecem:
Aqui é onde tudo acontece! Primeiro a classe Bar é instanciada trazendo a possibilidade de utilizar seus métodos e assim com a variável de referência (“Objeto”) b, uso o método doStuff passando como parâmetro a interface!
AÍ ESTÁ O PROBLEMA, EU NÃO TENHO UMA CLASSE QUE IMPLEMENTA ESSA INTERFACE!
Por isso eu preciso criar uma classe anônima que implemente essa interface para poder passar o parâmetro! Para praticalizar o processo eu posso criar uma classe anônima que implemente essa interface dentro do argumento do método. Por exemplo esse trecho do argumento new Ex1Foo(), seria o mesmo que ClasseQualquer classeImplementadoraQualquer = new Ex1Foo{…….
A classe é já instanciada automaticamente com os métodos da interface obrigatóriamente implementados, ou seja pra resumir: É instanciada uma classe anônima do tipo Ex1Foo, e aplicando suas funções já dentro do parâmetro.
public class Ex1MyWonderfulClass {
void go() {
Ex1Bar b = new Ex1Bar();
b.doStuff(new Ex1Foo() {
@Override
public void metodoDaInterface() {
System.out.println("Método da interface");
}
});
}
public static void main(String[] args) {
Ex1MyWonderfulClass wonderfulClass = new Ex1MyWonderfulClass();
// Aqui utilizo o método go e tanto o método doStuff quanto o método
// metodoDaInterface são executados perfeitamente!
// Obs: O método da interface é executado porque ele é chamado no método
// da classe Ex1Bar
wonderfulClass.go();
}
}
A saída dos método é:
LOL Método da interface!







