Java NullPointerException
-
21-09-2019 - |
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?
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.