Attempt to invoke interface method ‘boolean java.util.List.isEmpty()‘ on a null object reference

今天碰到一个crash:

java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.isEmpty()' on a null object reference

解读一下就是,list(ArrayList)对象未实例化。但是第一次执行这个方法时,正常,再次执行这个方法时,报错。执行代码如下:

if (!testArrayList.isEmpty()){
    ...
}
注意:在ArrayList中,testArrayList.isEmpty()等同于testArrayList.size==0;判断null还是得使用 ArrayList==null。
但是testArrayList这个全局变量我已经实例化了,为什么还会如此:
public static List<String> testArrayList = new ArrayList<>();

断点跟踪后发现了问题,我在某一个代码块中执行了clear操作:

testArrayList.clear();

执行了这个操作后,testArrayList==null。这也解释了为什么第一次正常执行,clear后,再次执行时报错。

所以执行语句可以这样改:

if (testArrayList !=null && !testArrayList.isEmpty()){
    ...
}

也可以该释放语句:

testArrayList.clear();
testArrayList = new ArrayList<>();

又解决一个疑问!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误是因为在一个空对象引用上调用了一个接口方法,具体是调用了List接口的add方法。这个错误提示意味着你需要检查你的代码,确保在调用add方法之前,List对象已经被正确地初始化了。如果List对象为空,你需要先创建一个新的List对象并将其赋值给该变量,然后才能调用add方法。 ### 回答2: "attempt to invoke interface method 'boolean java.util.list.add(java.lang.object)' on a null object reference"这个错误通常是由于程序中有一个空对象,并且试图在其上调用一个方法而导致的。 首先我们需要了解一下什么是接口。接口是Java语言中的一种特殊类型,是一组方法的集合,可以在任何实现该接口的类中使用。Java中的List接口是一个非常常用的接口,包含了许多操作集合的方法,例如add(), remove()等。 而这个错误提示中说到的“java.util.list.add(java.lang.object)”实际上是在使用List接口中的add()方法,将一个Object类型的对象添加到List中。 但是,当我们在调用add()方法时,发现出现了一个空对象引用,这就导致了出现空指针异常。因此,我们不能在空对象引用上调用任何方法。 解决方法是我们需要检查代码中的变量是否引用了一个空的对象,以避免出现空指针异常。如果我们创建了一个对象之后,没有为其分配任何值或对象值被回收了,那么我们就会得到一个空对象引用。 我们可以通过一些代码检查工具来排查问题,例如IntelliJ IDEA,它可以帮助我们在代码编写时检查出一些潜在的错误,帮助我们避免出现一些常见的错误。 总之,要避免“attempt to invoke interface method 'boolean java.util.list.add(java.lang.object)' on a null object reference”这个错误提示,我们需要仔细检查代码中的对象是否有值,避免出现空对象的情况。 ### 回答3: 这个错误信息是一种Java运行时异常,通常发生在尝试调用一个接口方法时,这个接口实例为null。具体地说,这个错误表明尝试向一个空的List中添加元素,在JavaList是一个接口,它需要一个实例来使用它的方法,如果这个实例还没有被初始化或者已经被销毁,就会抛出这个异常。 通常情况下,解决这个问题的方法是在使用List的方法之前,先确保这个List实例已经被正确地初始化。例如,在使用ArrayList时,我们可以这样初始化: List<String> list = new ArrayList<>(); 这样就可以保证List对象被正确初始化了,就可以向它添加元素了。如果我们在没有初始化List对象的情况下,尝试向它添加元素,就会抛出上述的空指针异常。 除此之外,这个问题还可能出现在多线程的情况下。如果一个List实例被多个线程同时访问,并且没有使用同步方法来保证线程安全,也可能会引发这个异常。在这种情况下,我们需要考虑使用线程安全的List实现,例如CopyOnWriteArrayList。 总的来说,避免这个错误的方法就是在使用List对象之前,先确保它被正确地初始化并且线程安全。如果这个问题已经发生了,我们可以通过检查代码,找出在调用List方法之前没有正确初始化List对象实例的代码行,并根据实际情况进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值