Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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:ListA.addAll(ListB)引发NullPointerException?_Java_List_Nullpointerexception_Add - Fatal编程技术网

Java:ListA.addAll(ListB)引发NullPointerException?

Java:ListA.addAll(ListB)引发NullPointerException?,java,list,nullpointerexception,add,Java,List,Nullpointerexception,Add,err部分在代码中大写,它也在foreaching中出现。由于抽象列表的原因,它无法初始化,声明位于静态字段中。这些列表具有相同的类型 import java.util.*; public class Test { public static final List<String> highPrio = Arrays.asList("*","/"); public static List<String> ops; pub

err部分在代码中大写,它也在foreaching中出现。由于抽象列表的原因,它无法初始化,声明位于静态字段中。这些列表具有相同的类型

import java.util.*;

public class Test
{

        public static final List<String> highPrio = Arrays.asList("*","/");
        public static List<String> ops;

        public static void main(String[] args)
        {
                //ERROR HERE, why do it throw nullPointer?
                ops.addAll(highPrio);

                for(String s : ops)
                {
                        System.out.println(s);
                }
        }
}
import java.util.*;
公开课考试
{
公共静态最终列表highPrio=Arrays.asList(“*”,“/”);
公共静态列表;
公共静态void main(字符串[]args)
{
//这里出错,为什么抛出空指针?
奥普·阿道尔(highPrio);
用于(字符串s:ops)
{
系统输出打印项次;
}
}
}
为什么不在初始化中创建新列表?

未初始化的原因是无法使用
=new List()
。我看不出有什么逻辑不允许这样做。它一定与内在因素有关,如数据结构或其他因素


Test.java:7:java.util.List是抽象的;无法实例化
公共静态列表ops=新列表()

为什么列表是一个界面?


我知道许多数据结构,如堆栈实现列表。但我不明白为什么列表是一个接口,为什么不是一个表,例如。我将列表视为一个基本结构,您可以使用它实现其他结构。接口是一种可以指定结构需求的东西。原始性或可扩展性是作为接口的原因吗

因为ops是空的。列表是一个接口这一事实并不意味着您不能初始化字段:

public static List<String> ops = new ArrayList<String>();
publicstaticlist-ops=newarraylist();

List
是一个接口,因为在提供相同合同的同时有多种实现方法(尽管性能特征不同)。例如,
ArrayList
是数组支持的,而
LinkedList
是一个链表。

您需要实例化ops列表

public static List<String> ops = new ArrayList<String>();
publicstaticlist-ops=newarraylist();

或您选择的其他列表类型。

操作从未初始化

您必须执行
ops=newarraylist()在执行addAll命令之前。否则,您将调用空对象

无法执行
ops=new List
”的原因是,List是一个接口,无法初始化。ArrayList不是一种抽象类型,它扩展了列表,因此在这种上下文中是合适的


抽象类型和接口不能作为实际对象创建,只能用于引用某些具体对象。具体类型必须扩展您尝试使用的抽象类型或接口

您尚未初始化列表操作

e、 g

publicstaticlist-ops=newarraylist();
或者你也可以这样做

import java.util.*;

public class Test
{

    public static List<String> ops;

    public static void main(String[] args)
    {
            ops = Arrays.asList(new String[] {"*", "/"});

            for(String s : ops)
            {
                    System.out.println(s);
            }
    }
}
import java.util.*;
公开课考试
{
公共静态列表;
公共静态void main(字符串[]args)
{
ops=Arrays.asList(新字符串[]{“*”,“/”});
用于(字符串s:ops)
{
系统输出打印项次;
}
}
}

操作系统尚未初始化

将声明更改为:

public static List<String> ops = new ArrayList<String>();
publicstaticlist-ops=newarraylist();

您正在添加什么?变量
ops
仍然为空,就像下面的
s
为空一样:

public static String s;

我认为你真正的问题是:

为什么我不能实例化一个列表?

或者为什么我会得到:
Test.java:7:java.util.List是抽象的;无法实例化公共静态列表ops=new List()

在Java中,List是一个接口,正如您所说:
接口是一种可以指定结构要求的东西,就像需要填写的工作描述一样。但是你不能把工作描述从纸上剪下来,简单地用它来完成工作,即
列表
工作描述
是抽象的;无法实例化

相反,您需要应聘者填补
列表
的职位描述中描述的职位。满足作业要求的候选(“具体实现”)是
ArrayList
LinkedList
Vector
,等等。除非您使用特定的候选来初始化
列表ops
var来执行作业,否则您没有人(
null
)来实际执行该工作(通过引发一个
NullPointerException
来实现

List<String> ops = new ArrayList<String>();
List ops=new ArrayList();

Test.java:7:java.util.List是抽象的;不能实例化公共静态列表ops=new List();List是一个接口,因此它没有构造函数。List是一个接口,但是如果你看一下代码,它正在创建一个实现列表接口的ArrayList,那么这行的真正含义是什么:“List hello”?名为hello的接口——使用字符串操作?HH,接口的名称是
List
。它专门使用
String
,因此
List
hello
List
类型的参考变量。但您确实需要找到一个好的Java教程。使用List-immutableList=Col时,我遇到了类似的问题lections.emptyList();更改为List mutableList=new ArrayList()后;已解决。
List<String> ops = new ArrayList<String>();