NullPointerException al crear una matriz de objetos [duplicado]
-
20-09-2019 - |
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?
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() {}
}