Pinco:
Estoy pidiendo una vez más para soporte técnico.
Necesito para definir un tipo personalizado dentro de una clase, lo he hecho así:
public class MainClass {
private class CustomType {
public byte[] varA;
public int varB;
public CustomType() {
varA = new byte[3];
varB = 13;
}
}
private CustomType[] myArray;
public MainClass() {
myArray = new CustomType[1024]
System.out.println(this.CustomType[0].varB);
}
}
Cuando corro que arroja un NullPointerException
aSystem.out.println(this.CustomType[0].varB);
He probado si miMatriz se ha inicializado correctamente con 1024 elementos y lo hace, sin embargo, me parece que no puede acceder a ellos.
Me acabo de mudar de C ++ para Java, así que todavía estoy acostumbrando a ella, me estoy perdiendo algo flagrante ?.
Joop Eggen:
Dos cosas,
- Usted debe crear una instancia CustomType.
- CustomType no necesita tener acceso a
MainClass.this
lo que puede hacer que sea estática.
Entonces
public class MainClass {
private static class CustomType {
public byte[] varA;
public int varB;
public CustomType() {
varA = new byte[3];
varB = 13;
}
}
private CustomType[] myArray;
public MainClass() {
myArray = new CustomType[1024];
for (int i = 0; i < myArray.length; ++i) {
this.CustomType[i] = new CustomType();
}
// Or
Arrays.setAll(myArray, CustomType::new);
System.out.println(this.CustomType[0].varB);
}
}
No es por lo que es un memorias estáticas MainClass.this
en cada CustomType
instancia que es una sobrecarga innecesaria.