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

Stand Out as a Java Developer and Get Your Dream Job!

You will get the book by email in a few minutes after registering.