错误部分在代码中是大写的,它也在预告中。由于抽象列表,它无法初始化,声明在静态字段中。列表具有相同的类型。
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);
}
}
}
为什么不在初始化中使用新的List()?
未初始化的原因是无法使用= new List<String>()
。我看不到不允许它的逻辑。它必须与内在因素有关,例如数据结构或其他内容。
Test.java:7: java.util.List is abstract; cannot be instantiated
public static List<String> ops = new List<String>();
为什么列表是一个界面?
我知道许多数据结构如堆栈实现列表。但我无法理解为什么List是一个接口,为什么不以Table为例。我将list视为一个原始结构,您可以使用它来实现其他结构。接口是可以指定结构要求的东西。作为界面的原始性或广泛性的原因是什么?
答案 0 :(得分:12)
因为ops为null。 List是一个接口这一事实并不意味着你无法初始化该字段:
public static List<String> ops = new ArrayList<String>();
List
是一个接口,因为有多种方法可以实现它,同时提供相同的合同(尽管性能特征不同)。例如,ArrayList
支持数组,而LinkedList
是链接列表。
答案 1 :(得分:4)
您需要实例化操作列表。
public static List<String> ops = new ArrayList<String>();
或您选择的其他列表类型。
答案 2 :(得分:1)
ops永远不会被初始化。
在执行addAll命令之前,您必须执行ops = new ArrayList<String>();
。否则你正在调用一个空对象。
您无法执行ops = new List<String>
'的原因是因为List是一个接口,无法初始化。 ArrayList不是一个抽象类型并扩展了List,所以在这种情况下它是合适的。
抽象类型和接口不能作为实际对象创建,只能用于引用某些具体对象。具体类型必须扩展您尝试使用的抽象类型或接口。
答案 3 :(得分:1)
您尚未初始化List ops;
e.g。
public static List<String> ops = new ArrayList<String>();
或者你可以做
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);
}
}
}
答案 4 :(得分:1)
ops尚未初始化。
将声明更改为:
public static List<String> ops = new ArrayList<String>();
答案 5 :(得分:0)
你正在添加什么?变量ops
仍然为空,就像下面的s
为空:
public static String s;
答案 6 :(得分:0)
我认为你真正的问题是:
为什么我不能实例化一个列表?
或者为什么我会得到:Test.java:7: java.util.List is abstract; cannot be instantiated public static List<String> ops = new List<String>();
在Java中,List是一个接口,就像你说的那样:Interface is a thing where you can specify requirements for a structure
- 它就像一个需要填充的工作描述。但是你不能将工作描述从论文中删除,只需用它来完成工作,即List
工作描述is abstract; cannot be instantiated
。
相反,您需要候选人填写List
的职位描述所描述的职位。满足工作要求的候选人(“具体实施”)是ArrayList
,LinkedList
,Vector
等。除非您使用特定候选人初始化List<String> ops
var为了完成这项工作,你没有人(null
)真正开展工作(通过提出NullPointerException
。
List<String> ops = new ArrayList<String>();