当前位置: 首页 > 知识库问答 >
问题:

Java集合在使用Collections.addAll()时何时抛出NullPointerException

慕才
2023-03-14

Collections.AddAll()方法在什么条件下抛出NullPointerException?官方文件提到:

NullPointerException-如果指定的集合包含null元素并且该集合不允许null元素,或者如果指定的集合为null

我如何确保这个“集合不允许空元素”

public class CollectionImpl {

public void checkList(){

    List<String> var1 = new ArrayList<String>();
     var1.add("One");
     var1.add("Two");
     var1.add("Three");

     System.out.println("var1 : " + var1);

     try{
         if(Collections.addAll(var1,"Four" , "Five" , null , "1")){
            System.out.println("True"); 
         }
     }
     catch(NullPointerException e){
         System.out.println("Caught Null Pointer Exception" + e);
     }
     catch(IllegalArgumentException e){
         System.out.println("Caught IllegalArgument Exception" + e);
     }
     finally{
         System.out.println("var1 : " + var1);
     }
}

输出

var1 : [1, 2, null]
True
var1 : [1, 2, null, 4, 5, null, 6]

共有1个答案

胡高寒
2023-03-14

集合是否支持null元素是集合实现本身的一个属性。它不是一个可以在集合的特定实例上更改的设置。正如其他人提到的,集合是否允许null应该始终记录在类的规范中。

您的示例使用ArrayList,它允许Null元素,因此使用Null值调用AddAll()将始终成功地将它们添加到列表中。

集合不允许null值的一个示例是ArrayDeque。如果按以下方式更改var1的声明:

Collection<String> var1 = new ArrayDeque<String>();

然后您将从对AddAll()的调用中得到一个抛出的NullPointerException

 类似资料:
  • 问题内容: 除了a 和Java 可以两次包含相同的元素外,a 和Java 之间在实践上还有什么区别吗?它们具有相同的方法。 (例如,是否给我更多选择来使用接受s但不接受s的库?) 编辑: 我可以认为至少有5种不同的情况来判断这个问题。其他人还能提出更多建议吗?我想确保我了解这里的微妙之处。 设计接受或参数的方法。更通用,并接受更多输入可能性。(如果我正在设计特定的类或接口,那么对我的消费者会更好,

  • 我有一个嵌套for循环的方法,如下所示: 在我想在'get leaves()'方法中引入之前,这一直很正常。现在,版本将不会编译,因为它说我有一个未报告的,必须捕获或声明要抛出该。我认为这是因为在多个线程上运行。IDE建议的try/catch块组合不能解决此问题。 在Interrupt parallel Stream execution中发布的第二个解决方案表明,我可能可以使用解决这个问题,但我无

  • 我使用的是Apache httpclient 4.3.6和httpcore 4.3.3(与opensaml 3.3.0捆绑)。我试图通过HTTPS通过代理获取网页,但每次都会收到SocketTimeoutException。HTTP连接工作正常。具体的超时并不重要;它只是需要更长的时间才能以更高的值失败。 示例代码: 尝试连接到代理时引发异常。堆栈跟踪是 这看起来很像Apache问题HTTPCLI

  • 问题内容: 在Java中使用Collection.sort时,如果内部对象之一为null,应该返回什么? 例: 可以说o2不是null,但o2.getDate()是,因此添加null验证时我应该返回1还是-1或0? 问题答案: 自然,这是您的选择。无论您编写什么逻辑,它都会定义排序规则。因此,“应该”在这里并不是正确的词。 如果您希望null出现在任何其他元素之前,则可以这样做

  • 问题内容: 因此,我认为我对Java中的异常处理有很好的基本了解,但是最近我正在阅读一些使我有些困惑和怀疑的代码。我要在这里解决的主要疑问是,何时一个人使用时会抛出如下所示的Java方法声明: 通过阅读一些类似的文章,我收集到的 引发信息 被用作一种声明, 表明 可以在方法执行期间引发 SomeException 。 我的困惑来自一些看起来像这样的代码: 在此示例中,您是否有任何理由要使用 抛出

  • 让我们从Javadocs开始: 非法国家例外 表示在非法或不适当的时间调用了方法。换句话说,Java环境或Java应用程序对于请求的操作没有处于适当的状态。 异常 抛出以指示方法已传递非法或不适当的参数。 上面的问题是,它们非常黑白分明。考虑一个用例,其中方法正在解析调用方提供的文件。该文件存在、可读且格式正确。但是,文件中的某些内容不符合业务规则。在这种情况下,什么是合适的异常抛出-或? 看看提