gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:01:00 25 4
gpt4 key购买 nike

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

为什么初始化时不用new List()?

没有初始化的原因是无法使用= new List<String>() .我看不出不允许这样做的逻辑。它必须与数据结构或其他内在因素有关。

Test.java:7: java.util.List is abstract; cannot be instantiated
public static List<String> ops = new List<String>();

为什么列表是接口(interface)?

我知道很多数据结构比如栈实现了列表。但是我不明白为什么 List 是一个接口(interface),为什么不是 Table 例如。我将列表视为一种原始结构,您可以使用它来实现其他结构。接口(interface)是您可以指定结构要求的东西。成为接口(interface)的原因是原始性还是广泛性?

最佳答案

因为 ops 为空。 List 是一个接口(interface)这一事实并不意味着您不能初始化该字段:

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

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

关于Java:ListA.addAll(ListB) 触发 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com