Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

He estado tratando de crear una matriz de una clase que contiene dos valores, pero cuando trato de aplicar un valor a la matriz consigo una NullPointerException.

public class ResultList {
    public String name;
    public Object value;

    public ResultList() {}
}

.

public class Test {
    public static void main(String[] args){
        ResultList[] boll = new ResultList[5];
        boll[0].name = "iiii";
    }
}

¿Por qué recibo este error y cómo puedo solucionarlo?

¿Fue útil?

Solución

Se creó la matriz, pero no puso nada en ella, por lo que tiene una matriz que contiene 5 elementos, todos los cuales son nulas. Se podría añadir

boll[0] = new ResultList();

antes de la línea donde se define Boll [0] .name.

Otros consejos

ResultList[] boll = new ResultList[5];

crea una matriz de tamaño = 5, pero no crea los elementos de la matriz.

Hay que crear una instancia de cada elemento.

for(int i=0; i< boll.length;i++)
    boll[i] = new ResultList();

creo llamando

 ResultList[] boll = new ResultList[5];

que ha creado una lista que puede contener 5 resultList, creo que tiene que inicializar la cápsula [0] antes de establecer el valor.

boll[0] = new ResultList();

Como muchos han dicho en las respuestas anteriores, ResultList[] boll = new ResultList[5]; simplemente crea una matriz de resultList tiene un tamaño de 5 donde todos los elementos son nulos. Cuando está utilizando boll[0].name, que está tratando de hacer algo como null.name y que es la causa de la NullPointerException. Utiliza el siguiente código:

public class Test {
    public static void main(String[] args){
        ResultList[] boll = new ResultList[5];

        for (int i = 0; i < boll.length; i++) {
            boll[i] = new ResultList();
        }

        boll[0].name = "iiii";
   } 
}

A continuación, el bucle for inicializa básicamente cada elemento de la matriz con un objeto ResultList, y una vez que el bucle for es completa, puede utilizar

boll[0].name = "iiii";

Además, puede probar esto a ti mismo mediante la adición de una línea de depuración a su clase, como por ejemplo:

public class ResultList {
    public String name;
    public Object value;

    public ResultList() {
        System.out.println("Creating Class ResultList");
    }
}

Siempre que se crea un objeto, uno de sus constructores deben ser llamados (si no hay ningún constructor, uno por defecto se crea automáticamente, de forma similar a la que ya tiene en su clase). Si sólo tiene un constructor, entonces la única manera de crear un objeto es llamar a ese constructor. Si la línea

ResultList[] boll = new ResultList[5]; 

realmente creado 5 nuevos objetos, que se vería su línea de depuración aparecen en la consola 5 veces. Si no es así, ya sabes el constructor no se está llamando. Nótese también que la línea anterior no tiene una lista de parámetros con los paréntesis de apertura y cierre "()" por lo que no es una llamada a la función - o llamada al constructor. En su lugar, sólo nos referimos al tipo. Estamos diciendo: "Necesito espacio para una matriz de objetos resultList, hasta 5 en total." Después de esta línea, todo lo que tienes es un espacio vacío, no objetos.

Al probar con varios arreglos, la línea de depuración ayudarán a confirmar que está recibiendo lo que desea.

ResultList p[] = new ResultList[2];

Al escribir esto que acaba de asignar espacio para una matriz de 2 elementos. Usted debe inicializar la variable de referencia al hacer esto:

for(int i = 0; i < 2; i++){
    p[i] = new ResultList();
 }
class ResultList {
    public String name;
    public Object value;
    public ResultList() {}
}
 public class Test {
    public static void main(String[] args){
    ResultList[] boll = new ResultList[5];
    boll[0] = new ResultList(); //assign the ResultList objet to that index
    boll[0].name = "iiii";  
   System.out.println(boll[0].name);
   }
 }

Hasta que haya creado el objeto ResultSet pero cada índice está vacío que apunta a null referencia que es la razón por la que está recibiendo nula. Por lo que sólo asignar el objeto en ese índice y luego ajustar el valor.

En primer lugar se ha creado 5 elemento del tipo resultList, pero al insertar valor que está insertando el nombre y el valor incorrecto. usted podría utilizar el constructor para crear e insertar los valores de los elementos de la matriz.

class ResultList {
    public String name;
    public Object value;
    public ResultList(String name,Object value){
        this.name = name;
        this.value = value;
        System.out.println(name+" --- "+value);
    }
}
public static void main(String[] args) {
        ResultList[] boll = new ResultList[5];
        boll[0] = new ResultList("myName","myValue");
    }

O se puede probar este escenario o puede hacer que el "nombre" variable estática en resultList clase. Así que cuando el resultList [] = new algodonero resultList [5]; será ejecutado en ese momento todas las variables de esa clase tiene voluntad asignar

public static void main(String[] args){
         ResultList[] boll = new ResultList[5];
    boll[0] = new ResultList();
    boll[0].name = "iiii";

    System.out.println(boll[0].name);
    }


public class ResultList {

    public  static String name;
    public  Object value;

    public ResultList() {}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top