Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java arraycopy中的空指针异常_Java_Arrays_Generics_Nullpointerexception - Fatal编程技术网

Java arraycopy中的空指针异常

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); //

我目前正在学习Java,并试图学习泛型。我有一个类
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
块捕获。最好只允许e
myArray
保持
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);
    }
}