Java中ArrayList的Getter/Setter使用问题:调用返回Null如何解决?
问题分析与解决办法
问题根源
你遇到的空指针问题,核心原因是两个arrayClass实例完全独立:
- 在
FirstPage的main方法中,你创建了arrayClass实例ac,并通过setSampleArrays给它的sampleArrays赋值了包含元素的ArrayList。 - 但在
Second类的testMeth方法里,你重新new了一个全新的arrayClass实例ar,这个新实例的sampleArrays成员变量从未被初始化,默认值是null,调用getSampleArrays()自然返回null,执行secondArray.get(0)就会抛出空指针异常。
解决办法1:传递已初始化的实例
修改Second类,让testMeth接收一个已赋值的arrayClass实例,从外部传入共享数据:
import java.util.ArrayList; public class Second { // 修改方法,接收外部传入的arrayClass实例 public void testMeth(arrayClass ac) { ArrayList<String> secondArray = ac.getSampleArrays(); System.out.println(secondArray.get(0)); } }
同时修改FirstPage的main方法,把已赋值的ac传给testMeth:
import java.util.ArrayList; public class FirstPage { public static void main(String args[]) { arrayClass ac = new arrayClass(); ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("First"); arrayList.add("Second"); arrayList.add("Third"); // 修正拼写错误:Thired → Third arrayList.add("Fourth"); ac.setSampleArrays(arrayList); Second second = new Second(); second.testMeth(ac); // 传入已初始化的实例 } }
解决办法2:使用单例模式(全局共享实例)
如果你的业务场景需要整个程序中只有一个arrayClass实例,可以改成单例模式:
import java.util.ArrayList; public class arrayClass { // 全局唯一的静态实例 private static arrayClass instance = new arrayClass(); private ArrayList<String> sampleArrays; // 私有构造方法,禁止外部new实例 private arrayClass() {} // 获取全局实例的方法 public static arrayClass getInstance() { return instance; } public ArrayList<String> getSampleArrays() { return sampleArrays; } public void setSampleArrays(ArrayList<String> sampleArrays) { this.sampleArrays = sampleArrays; } }
修改FirstPage的main方法:
import java.util.ArrayList; public class FirstPage { public static void main(String args[]) { // 获取全局单例实例 arrayClass ac = arrayClass.getInstance(); ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("First"); arrayList.add("Second"); arrayList.add("Third"); arrayList.add("Fourth"); ac.setSampleArrays(arrayList); Second second = new Second(); second.testMeth(); } }
修改Second类的testMeth:
import java.util.ArrayList; public class Second { public void testMeth() { // 获取同一个全局实例 arrayClass ar = arrayClass.getInstance(); ArrayList<String> secondArray = ar.getSampleArrays(); System.out.println(secondArray.get(0)); } }
额外提示
- 遵循Java命名规范:类名首字母大写,比如
arrayClass建议改成ArrayClass,提升代码可读性。 - 修正代码中的拼写错误:
Thired→Third。
内容的提问来源于stack exchange,提问作者Dilan Tharaka
相关产品推荐
相关产品推荐

