Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro de compilação do Comparator

Toda vez que eu compilo o meu código acontece o seguinte erro:

No enclosing instance of type TesteTop is accessible. Must qualify the allocation with an enclosing instance of type TesteTop (e.g. x.new A() where x is an instance of TesteTop).

    at br.com.bytebank.testes.util.TesteTop.main(TesteTop.java:38)

e não consegui entender ele, e já olhei se falta algum " { } ", mas o eclipse mostra que não. Enfim o meu código é esse:

package br.com.bytebank.testes.util;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import br.com.bytebank.modelo.Conta;
import br.com.bytebank.modelo.ContaCorrente;
import br.com.bytebank.modelo.ContaPoupanca;

public class TesteTop {

    public static void main(String[] args) {


        Conta cc1 = new ContaCorrente(22, 33);
        cc1.deposita(333.0);

        Conta cc2 = new ContaPoupanca(22, 44);
        cc2.deposita(444.0);

        Conta cc3 = new ContaCorrente(22, 11);
        cc3.deposita(111.0);

        Conta cc4 = new ContaPoupanca(22, 22);
        cc4.deposita(222.0);

        List<Conta> lista = new ArrayList<>();
        lista.add(cc1);
        lista.add(cc2);
        lista.add(cc3);
        lista.add(cc4);

        for(Conta conta : lista) {
            System.out.println(conta);
        }

        NumeroDaContaComparator comparator = new NumeroDaContaComparator();

        lista.sort(comparator);

        System.out.println("-----------------------");

        for(Conta conta: lista) {
            System.out.println(conta);
        }

    }
    class NumeroDaContaComparator implements Comparator<Conta>{

        @Override
        public int compare(Conta c1, Conta c2) {

            if(c1.getNumero() < c2.getNumero()) {
                return -1;
            } else if(c1.getNumero() > c2.getNumero()) {
                return 1;
            } else {
                return 0;
            }
        }

    }
}

Alguém entendeu porque?

1 resposta
solução!

Oi Guilherme, tudo bom?

Isso aconteceu porque estamos declarando uma classe dentro da outra. No caso, NumeroDaContaComparator dentro de TesteTop.

Duas classes podem (mas não devem) ser declaradas dentro de um mesmo arquivo, mas precisam estar em mesmo nível de escopo =)

No seu caso, ficaria algo como:

public class TesteTop {

    public static void main(String[] args) {


        Conta cc1 = new ContaCorrente(22, 33);
        cc1.deposita(333.0);

        Conta cc2 = new ContaPoupanca(22, 44);
        cc2.deposita(444.0);

        Conta cc3 = new ContaCorrente(22, 11);
        cc3.deposita(111.0);

        Conta cc4 = new ContaPoupanca(22, 22);
        cc4.deposita(222.0);

        List<Conta> lista = new ArrayList<>();
        lista.add(cc1);
        lista.add(cc2);
        lista.add(cc3);
        lista.add(cc4);

        for(Conta conta : lista) {
            System.out.println(conta);
        }

        NumeroDaContaComparator comparator = new NumeroDaContaComparator();

        lista.sort(comparator);

        System.out.println("-----------------------");

        for(Conta conta: lista) {
            System.out.println(conta);
        }

    }
}
class NumeroDaContaComparator implements Comparator<Conta>{

        @Override
        public int compare(Conta c1, Conta c2) {

            if(c1.getNumero() < c2.getNumero()) {
                return -1;
            } else if(c1.getNumero() > c2.getNumero()) {
                return 1;
            } else {
                return 0;
            }
        }

    }

Abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software