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

Android开发:跨类存取变量遇null值,求正确实现方案

问题原因分析

你遇到的核心问题是:在MainActivity和Test类中分别创建了两个完全独立的Data实例。

MainActivity里的data = new Data()是一个独立对象,你给它的text赋值为"HELLO";而Test类里的data = new Data()是另一个全新的对象,它的text变量默认是null。这两个对象在内存中完全分离、互不关联,所以Test类自然拿不到之前设置的值。

解决方案

下面是几种可行的解决方式,你可以根据业务场景选择:

1. 传递已初始化的Data实例(最推荐,灵活无副作用)

直接把MainActivity中创建好的Data对象传给Test类的方法,让Test操作同一个实例:

修改Test类的execute方法,添加Data参数:

public class Test {
    public void execute(Data data) {
        System.out.println(" GET from Test class: " + data.getText());
    }
}

在MainActivity中调用时传入已赋值的实例:

// 原赋值代码不变
Data data = new Data();
data.setText("HELLO");
System.out.println("GET from Main class: " + data.getText());

// 调用Test方法时传入data实例
Test test = new Test();
test.execute(data);

2. 将Data设计为单例模式(适合全局共享数据)

如果你的Data需要在多个类中共享,且整个应用只需要一个实例,可以把它改成单例:

public class Data {
    // 静态实例,保证全局唯一
    private static Data instance;
    private String text;

    // 私有构造方法,禁止外部直接new
    private Data() {}

    // 获取单例实例的方法
    public static Data getInstance() {
        if (instance == null) {
            instance = new Data();
        }
        return instance;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

MainActivity中使用单例:

Data data = Data.getInstance();
data.setText("HELLO");
System.out.println("GET from Main class: " + data.getText());

Test类中获取同一个实例:

public class Test {
    public void execute() {
        Data data = Data.getInstance();
        System.out.println(" GET from Test class: " + data.getText());
    }
}

注意:单例模式在Android中如果持有上下文等对象,可能引发内存泄漏,使用时要注意生命周期管理。

3. 使用静态变量(不推荐,仅临时快速解决)

把Data中的text改成静态变量,让所有Data实例共享这个变量:

public class Data {
    private static String text; // 静态变量

    public String getText() {
        return text;
    }

    public void setText(String text) {
        Data.text = text;
    }
}

这种方式虽能快速解决问题,但静态变量会长期占用内存,容易引发内存泄漏,除非你确定该变量不需要及时回收,否则不建议使用。

内容的提问来源于stack exchange,提问作者Splanas00

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:14:50