Erro do compilador ou eclipse?

3 respostas
Marky.Vasconcelos

Vou postar um exemplo simplificado que acho mais fáçil explicar:

Classe A:

package br;

public class A {
	protected static void clean(Container container) {
		Component comps[] = container.getComponents();
		for (Component comp : comps) {
			System.out.println(comp.getClass().getCanonicalName());
			if (comp instanceof JRootPane || comp instanceof JPanel
					|| comp instanceof JLayeredPane)
				clean((Container) comp);
			if (comp instanceof JTextField)
				((JTextField) comp).setText("");
		}
	}
}

Classe B:

package br;

import static br.A.clean;

import javax.swing.JInternalFrame;

public abstract class B extends JInternalFrame {
	public void clean() {
	   clean(this);
	}
}

Por que a linha clean(this) acusa esse erro:

The method clean() in the type B is not applicable for the arguments (B)

Enquanto o é applicavel para o clean(Container c) da classe A que esta importado staticamente?

Resolvi isso mudando:

clean(this);

Para:

A.clean(this);

3 Respostas

T

Isso não é só problema do Eclipse; o javac também dá um diagnóstico semelhante:

br\B.java:9: clean() in br.B cannot be applied to (br.B)
           clean(this);
           ^

Pelo que imagino, esse é um problema do “import static”. Como as regras dele são um pouco complicadas, eu aconselharia a não usá-lo, exceto quando estritamente necessário.

Marky.Vasconcelos

Realmente usei outras soluções mas esse erro me chamou a atenção.

Marky.Vasconcelos

Achei algo interessante sobre o assunto…(Me responderam no Java Ranch)

JLS - Shadowing Declarations
http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.3.1

Criado 9 de maio de 2008
Ultima resposta 6 de fev. de 2009
Respostas 3
Participantes 2