Java arraycopy中的空指针异常
我目前正在学习Java,并试图学习泛型。我有一个类Java arraycopy中的空指针异常,java,arrays,generics,nullpointerexception,Java,Arrays,Generics,Nullpointerexception,我目前正在学习Java,并试图学习泛型。我有一个类Holder,它接受varargs。我正试图将它们放入数组myArray,以备将来使用。然而,我在arraycopy行上得到了一个NullPointerException,我似乎不知道为什么 class Holder<T> { T[] myArray; public Holder(T... args) { System.arraycopy(args, 0, myArray, 0, args.length); //
Holder
,它接受varargs。我正试图将它们放入数组myArray
,以备将来使用。然而,我在arraycopy行上得到了一个NullPointerException
,我似乎不知道为什么
class Holder<T> {
T[] myArray;
public Holder(T... args) {
System.arraycopy(args, 0, myArray, 0, args.length); //null pointer exception
}
类持有者{
T[]myArray;
公共持有人(T…args){
System.arraycopy(args,0,myArray,0,args.length);//空指针异常
}
这是我用来创建实例的方法:
Holder<Integer> mySample = new Holder<>(1,2,3);
Holder mySample=新的Holder(1,2,3);
1) myArray
未初始化
2) 而
args
变为null
的可能性是因为myarray
未初始化
T[] myArray; // `myarray` is uninitialized, as of now.
public Holder(T... args) {
if(args != null && args.length > 0) {
myArray = new t[args.length]; // `myarray` is initialized here.
System.arraycopy(args, 0, myArray, 0, args.length);
}
}
myArray
未初始化(它是null
)请在此行添加断点,然后查看(args
或myArray
中的哪一个为null)@MadProgrammer-你一定已经回答了!猜猜,现在已经完成了!@RJ很高兴让其他人建立了一些rep;)专业提示:你可以使用数组,这样你就可以放弃复杂的arraycopy调用,只需说myArray=args.clone();
对参数进行null
和0
长度检查,您会得到一个很好的答案;)@MadProgrammer 0长度数组不应该引起任何问题否,但是为什么要浪费调用arrayCopy
:P@MadProgrammer为什么要进行空检查?如果传递的是null
而不是正确的数组,则此代码应该会中断。I如果你让myArray
为空,你只是把问题推迟到以后的某个场合,这使得查找错误变得更加困难。一般来说,检查null
是一个很好的做法。NullPointerException
是一个未经检查的异常,这意味着它不会被正常的try catch
块捕获。最好只允许emyArray
保持null
(符合方法的要求),然后使程序崩溃-IMHO。异常编程从来不是一个好主意;)
T[] myArray; // `myarray` is uninitialized, as of now.
public Holder(T... args) {
if(args != null && args.length > 0) {
myArray = new t[args.length]; // `myarray` is initialized here.
System.arraycopy(args, 0, myArray, 0, args.length);
}
}