You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:01:42