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!