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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top