Java NullPointerException
-
21-09-2019 - |
Pregunta
Estoy escribiendo dos clases para controlar simple subastas.Tengo un listo de la clase y de trabajo, que se encarga de las operaciones de una única subasta, y ahora estoy escribiendo otra clase como una casa de subastas, para mantener un registro de todas las subastas disponibles.Cuando se prueba la siguiente parte de la clase:
import java.util.ArrayList;
public class AuctionHouse {
private ArrayList<DutchAuction> huutokaupat;
public AuctionHouse() {
}
public void addAuction(DutchAuction newAuction) {
huutokaupat.add(newAuction);
}
}
dentro de un método main con el siguiente código("kauppa" es un probado y de trabajo objeto de la variable):
AuctionHouse talo = new AuctionHouse();
talo.addAuction(kauppa);
Obtengo:
Excepción en el thread "main" java.lang.NullPointerException en la ope.la subasta.el holandés.AuctionHouse.addAuction(AuctionHouse.java:13) en la ope.la subasta.el holandés.DutchAuctionTest.principal(DutchAuctionTest.java:54)
¿Cómo puedo solucionar el problema?
Solución
Usted nunca realmente se crea el ArrayList.Usted necesita
private ArrayList huutokaupat = new ArrayList();
Otros consejos
Todo el mundo ha mencionado el Java 1.4 forma de crear la lista. En Java 5 y arriba, la forma correcta de crear una instancia de una colección incluirá el tipo genérico, así:
ArrayList<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();
Además, a menos que necesite usar las características específicas de un ArrayList, es mejor definir huutokaupat utilizando una interfaz en lugar de la aplicación. Por ejemplo:
List<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();
Si usted sólo tiene que utilizar métodos de interfaz de la lista, o incluso
Collection<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();
si sólo necesita métodos de recolección. Usando una interfaz como lista o colección para definir el tipo de variable hace que sea posible cambiar la aplicación (ArrayList) con algo más en el futuro, y hacer este cambio tiene efectos mínimos en su código.
Su lista de arreglo no se inicializa cuando se agrega a la misma. Inicializar en sus constructores, o mejor aún, en el campo:
private ArrayList huutokaupat = new ArrayList();
huutokaupat
no se ha inicializado?
Añadir al constructor:
public AuctionHouse() {
huutokaupat = new ArrayList();
}
Esto creará un objeto ArrayList que se hace referencia de la variable huutokaupat.