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

Adicionando um Objeto em uma lista do tipo Collection

Olá a todos estou com um trabalho da universidade e estou com umas duvidas quanto a implementação. O problema é que quando vou inserir um Objeto ele aponta um java.lang.NullPointerException.

Classe MyCozyLibrary

public class MyCozyLibrary implements SmallLibrary {

    private Collection allBooks;

    public MyCozyLibrary() {
        /* COMPLETE */
    }
                    /* COMPLETE */

    // inner comparator class.
private class ByYearComparator implements Comparator {

        public int compare(Object arg0, Object arg1) {
            Book book1, book2;
            book1 = (Book) arg0;
            book2 = (Book) arg1;

            if (book1.getYear() < book2.getYear()) {
                return -1;
            } else if (book1.getYear() > book2.getYear()) {
                return 1;
            } else {
                return 0;
            }
        }
    }

Este construtor não entendi o que o professor quer que faça, a classe ByYearComparator eu implementei como esta a cima ela vinha assim antes:

private class ByYearComparator implements Comparator {

        public int compare(Object arg0, Object arg1) {
            Book book1, book2;
            book1 = (Book) arg0;
            book2 = (Book) arg1;
            }
}

Agora vem o problema, eu tento adicionar um objeto não consigo.

@Override
    public void addBook(Book book) throws UnexpectedDuplicateException {
        /*
         * Adds the given book to the library - UnexpectedDuplicateException if the
         * library already contains a book equal to the argument
         */     

        if (allBooks != null) {
            for (Object books : allBooks.toArray()) {
                if (books == book) {
                    throw new UnexpectedDuplicateException("Livro ya existe!");
                }
            }
            allBooks.add(book);
        } else {
            System.out.println("Sou um livro:  "  +  book);
            allBooks.add(book);
        }
    }

Os valores que chegam na referencia saem normal se coloco uma saída:



--->INICI: test 02 de MyCozyLibrary

>> PROVA: implement biblioteca...
Sou um livro: [AAAK-23-ZZ]-(2000)-A VECTOR WITH TWO ARRAYS
    ERROR: EXCEPCION inesperada
        java.lang.NullPointerException


java.lang.NullPointerException
    at pr1.MyCozyLibrary.addBook(MyCozyLibrary.java:53) // esta e exatamente a linha allBooks.add(book);
    at pr1.Test02.main(Test02.java:87)
3 respostas
solução!

Boa tarde, Gabriel! Como vai?

Repare que dentro do método addBook() vc faz um if assim:

if (allBooks != null) {
     // restante do código omitido.
} else {
     System.out.println("Sou um livro:  "  +  book);
     allBooks.add(book);
}

Então veja que o seu if verifica se a instância allBooks é diferente de null. E, caso seja nula, situação essa que é tratada no else, vc faz allBooks.add(book). Contudo, como allBooks é nulo, vc acaba obtendo o famoso NullPointerException!

Entendeu o que está acontecendo? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Sim, ali entendi que a lista nunca era inicializada. no proprio construtor eu fiz a inicializacao e tudo funcionando perfeito! Obrigado pela ajuda!

Por nada, Gabriel! Sempre que tiver qualquer dúvida é só mandar aqui no fórum da Alura!

Grande abraço e bons estudos, meu aluno!