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

如何在不同模块中正确修改UserInfo类实例的userPhone属性?

问题分析与解决方案

你遇到的问题核心是重新声明了一个未初始化的UserInfo变量,直接赋值导致空指针异常(NullPointerException)。

为什么会出错?

你在另一个模块里写的UserInfo user;只是声明了一个新的UserInfo类型变量,但这个变量并没有指向任何实际的对象(它的值是null)。直接对null对象的属性赋值,自然会抛出错误。

而且顺便提一句:你最初的初始化代码其实也有遗漏——UserInfo user;只是声明变量,必须通过new UserInfo()来创建对象实例,不然一开始的赋值也会报错,应该是你写的时候漏了这步对吧?

正确的实现方式

要修改原有对象的userPhone,关键是要拿到之前已经创建并赋值好的那个UserInfo实例,而不是重新声明新变量。这里分两种常见场景:

场景1:通过方法参数传递对象(推荐)

如果两个模块是通过方法调用交互,直接把原有UserInfo对象作为参数传给修改方法即可:

// 在另一个模块的类中定义修改方法
public void updateUserPhone(UserInfo existingUser) {
    // 直接修改传入的已有对象的属性
    existingUser.userPhone = 5555555;
}

// 在原来的模块中调用这个方法,传入已初始化好的user对象
// 注意:这里的user是你之前已经new并赋值过的实例
updateUserPhone(user);

场景2:通过全局状态访问对象(不推荐大型应用,适合小型场景)

如果两个模块没有直接的方法调用关系,可以把原有对象放到一个全局可访问的容器中,比如静态类的静态字段:

// 先定义一个全局存储类
public class AppGlobalData {
    public static UserInfo currentLoggedInUser;
}

// 在原来的初始化代码中,把创建好的对象存入全局容器
UserInfo user = new UserInfo(); // 必须先实例化对象!
user.userName = "Mani";
user.userAddress = "No12, XYZ Street";
user.userCity = "WorldCity";
user.userPhone = 1234567;
AppGlobalData.currentLoggedInUser = user;

// 在另一个模块中修改属性(记得先判空,避免空指针)
if (AppGlobalData.currentLoggedInUser != null) {
    AppGlobalData.currentLoggedInUser.userPhone = 5555555;
}

额外提示

如果你的UserInfo类是在多线程环境下使用,建议给userPhone属性加上线程安全的处理(比如用volatile关键字,或者加同步锁),避免并发修改导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:06