NullPointerException al crear una matriz de objetos

He estado tratando de crear una matriz de una clase que contenga dos valores, pero cuando bash aplicar un valor a la matriz obtengo 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?

Usted creó la matriz pero no puso nada en ella, por lo que tiene una matriz que contiene 5 elementos, todos los cuales son nulos. Usted podría agregar

 boll[0] = new ResultList(); 

antes de la línea donde estableces boll [0] .name.

 ResultList[] boll = new ResultList[5]; 

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

Tienes que instanciar cada elemento.

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

yo pienso llamando

  ResultList[] boll = new ResultList[5]; 

creaste una lista que puede contener 5 ResultList, creo que tienes que inicializar boll [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 que tiene el tamaño 5 donde todos los elementos son nulos. Cuando está utilizando boll[0].name , está intentando hacer algo como null.name y esa es la causa de la NullPointerException. Usa 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"; } } 

Aquí, el bucle for inicializa básicamente cada elemento de la matriz con un objeto ResultList , y una vez que se completa el bucle for, puede usar

 boll[0].name = "iiii"; 

Además, puede probar esto a usted mismo agregando una línea de depuración a su clase, como:

 public class ResultList { public String name; public Object value; public ResultList() { System.out.println("Creating Class ResultList"); } } 

Cada vez que se crea un objeto, se debe invocar a uno de sus constructores (si no hay un constructor, se crea automáticamente uno por defecto, similar al que ya tiene en su clase). Si solo tiene un constructor, entonces la única forma de crear un objeto es llamar a ese constructor. Si la linea

 ResultList[] boll = new ResultList[5]; 

realmente creó 5 objetos nuevos, verá que su línea de depuración aparece en la consola 5 veces. Si no lo hace, sabrá que no se está llamando al constructor. Tenga en cuenta también que la línea anterior no tiene una lista de parámetros con abrir y cerrar paréntesis “()” por lo que no es una llamada de función – o llamada de constructor. En cambio, solo nos estamos refiriendo al tipo. Estamos diciendo: “Necesito espacio para una variedad de objetos ResultList, hasta un total de 5”. Después de esta línea, todo lo que tienes es espacio vacío, no objetos.

Mientras prueba varias correcciones, la línea de depuración le ayudará a confirmar que está obteniendo lo que desea.

 ResultList p[] = new ResultList[2]; 

Al escribir esto, asigna espacio para una matriz de 2 elementos. Debe inicializar la variable de referencia haciendo 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 apunte a la referencia nula, que es la razón por la que está obteniendo nulo. Así que solo asigne el Objeto en ese índice y luego establezca el valor.

en primer lugar, ha creado 5 elementos del tipo ResultList, pero al insertar valor está insertando el nombre y el valor incorrectamente. podrías usar constructor para crear e insertar valores en 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 puede probar este escenario o puede hacer que la variable “nombre” sea estática en ResultList Class. Entonces, cuando ResultList [] boll = new ResultList [5]; se ejecuta en ese momento todas las variables de esa clase se asigna

 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() {} }