Java:ListA.addAll(ListB)引发NullPointerException?
err部分在代码中大写,它也在foreaching中出现。由于抽象列表的原因,它无法初始化,声明位于静态字段中。这些列表具有相同的类型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
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>();