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!

Classe interna anônima definida no argumento

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s