我正在尝试将“A”字符串传递给构造函数。我遇到的问题是必须设置的实例变量没有填充任何东西。现在我正在尝试与我不同的事情。一旦我用数组变量尝试任何东西,它就会给出一个NPE。那么如何解决这个问题并在将来避免它。谢谢!
public Array(String x){
if(x == "A" ){
array = { { 1, 1 }, { 1, 1 }, { 1, 1 } };
}
if(x == "B"){
array = { { 2, 2 }, { 2, 2 }, { 2, 2 } };
}
if(x == "C"){
array = { { 3, 3 }, { 3, 3 }, { 3, 3 } };
}
}
答案 0 :(得分:2)
array
可能总是null
。有两个原因......
首先,比较逻辑是不正确的。请勿使用==
来比较字符串use String.equals
instead。
其次,逻辑没有默认条件。如果没有满足任何条件会发生什么?永远不会初始化array
。添加默认值:
if(x.equals("A") ){
array = { { 1, 1 }, { 1, 1 }, { 1, 1 } };
} else if(x.equals("B")){
array = { { 2, 2 }, { 2, 2 }, { 2, 2 } };
} else if(x.equals("C")){
array = { { 3, 3 }, { 3, 3 }, { 3, 3 } };
} else {
// set array to a default value?
// throw an exception?
// something else?
}
(注意:如果在构造函数中抛出异常在Java中是好的或坏的做法,我无法肯定地说。很容易就是JVM在不熟悉的事情上如何表现的细节。如果这是不好的做法,那么也许工厂方法而不是构造函数将是一个很好的方法。)
答案 1 :(得分:0)
public ArrayWrapper(String x){ //"Array" is a confusing name for a class
if(x == null) {
System.err.println("x is null! Please instantiate x before calling Array().");
return;
}
//...
}