Classe interna anônima definida no argumento

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!

Written by
Rafael del Nero
Join the discussion

Senior Java Interview Questions from Global Companies

Includes detailed answers and practical explanations from real interviews.

Delivered to your email within minutes.