Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Ordem de avaliação dos erros de compilação

Minha dúvida é a respeito da ordem em que os erros de compilação são avaliados. Logo de cara, minha impressão era de que esse código não compilaria pois está tentando atribuir uma instancia D para uma variável C. Porque o erro de compilação apresentado diz respeito a variável que está sendo passada para o método equals e não a criação da variavel b no método main?

4 respostas
solução!

Ola, Eduardo!

Dois erros: 1º erro:

c.x vai dar erro porque o c esta sendo passado como paramentro pelo metodo equals e no caso é um Object e a classe Object não tem um atributo x.

Como segue o codigo abaixo:

public boolean equals(Object c) {
        return c.x==x;
    }

Para resolver teria q fazer um cast no c. Ex.:

public boolean equals(Object c) {
        return ((C)c).x==x;
    }

2º erro. A Classe D não é filha da Classe C nem de outra Classe que seja fila da Classe C. Nesse caso o compilador vai reclamar porque ele vai ver que a Classe C não é Filha da Classe D. C b = new D();

Sobre a Ordem o compilador vai reclamar primeiro dos tipos incompatíveis no metodo equals depois ele vai reclamar do momento que tenta fazer um new do tipo D para o Tipo C.

Eduardo,

Somente como curiosidade, altera sua classe igual segue abaixo:


class A {
    public static void main(String[] args) {
        C a = new C();
        C b = new D();
        a.x = 1;
        b.x = 1;
        System.out.println(a == b);
        System.out.println(a.equals(b));
    }
}

class B extends C {
}

class D {
    int x;
}

class C {
    int x;

    public boolean equals(Object c) {
        return c.x == x;
    }
}

Qual a ordem que os erros serão apresentados ?

Abraço!

Percebi agora que não tinha verificado corretamente a mensagem de erro. Pensei que apenas o erro do método equals estava sendo relatado, mas ambos os erros são apresentados. O erro do método equals é o primeiro, mas o erro de atribuição aparece logo em seguida.

Minha preocupação seria para o caso de, na avaliação, peguntarem em qual linha está o erro. Imagino que nesse caso, a resposta correta seria a que aponta para os dois erros. Correto?

Alías, Cristiano, ordenando o código diferente a ordem de apresentação dos erros é alterada, mas acho que isso, no fim das contas tanto faz.

Eduardo,

Acredito que a resposta correta seria: que aponta para os dois erros.

Concordo com você que, nesse caso a ordem dos erros não importa.

Abraço ! :o)