Pergunta

Estou escrevendo duas aulas para lidar com leilões simples. Eu tenho uma aula pronta e funcionando, que lida com as operações de um único leilão, e agora estou escrevendo outra aula como uma casa de leilões, para acompanhar todos os leilões disponíveis. Ao testar a parte seguinte da classe:

import java.util.ArrayList;

public class AuctionHouse {
    private ArrayList<DutchAuction> huutokaupat;

    public AuctionHouse() {
    }

    public void addAuction(DutchAuction newAuction) {
        huutokaupat.add(newAuction);
    }
}

Dentro de um método principal com o seguinte código ("KAUPPA", é um objeto testado e funcional variável):

AuctionHouse talo = new AuctionHouse();
talo.addAuction(kauppa);

Eu recebo:

Exceção no tópico "Main" java.lang.nullpointerException em ope.auction.dutch.auctionhouse.addauction (leilthouse.java:13) em ope.auction.dutch.dutchauctiontest.main (holandêscuationtest.java:54)

Como posso resolver o problema?

Foi útil?

Solução

Você nunca criou o Arraylist. Você precisa

private ArrayList huutokaupat = new ArrayList();

Outras dicas

Todo mundo mencionou a maneira Java 1.4 de criar a lista. Em Java 5 ou mais, a maneira correta para instanciar uma coleção também incluirá o tipo genérico:

ArrayList<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();

Além disso, a menos que você precise usar recursos específicos para uma lista de Array, é melhor definir o Huutokaupat usando uma interface em vez da implementação. Por exemplo:

List<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();

Se você só precisar usar os métodos de interface da lista, ou mesmo

Collection<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();

Se você precisar apenas de métodos de coleta. O uso de uma interface como lista ou coleção para definir o tipo de variável possibilita alternar a implementação (ArrayList) com outra coisa no futuro, e fazer com que esse interruptor tenha efeitos mínimos no seu código.

Sua lista de matrizes não é inicializada quando você está adicionando a ela. Inicialize -o em seus construtores, ou melhor ainda, em campo:

private ArrayList huutokaupat = new ArrayList();

huutokaupat não é inicializado?

Adicione ao construtor:

public AuctionHouse() {
     huutokaupat = new ArrayList();
}

Isso criará um objeto Arraylist que é referenciado na variável HuutokaUPAT.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top