Java对象创建后如何修改关联Third类的name字段无需新建实例
需求说明
你已经完成First、Second、Third三个关联类的定义与实例绑定,当前关联的Third实例name字段值为john,需要在不创建新Third类对象的前提下,将该字段值修改为sam。
现有类定义
First类
public class First { List<Second> second; public List<Second> getSecond() { return second; } public void setSecond(List<Second> second) { this.second = second; } }
Second类
public class Second { protected Third third; public Third getThird() { return third; } public void setThird(Third third) { this.third = third; } }
Third类
public class Third { protected String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Third{" + "name='" + name + '\'' + '}'; } }
解决方案
Third类已经提供了public的setName setter方法用于修改name属性,不需要新建Third实例,直接获取已有的Third实例调用该方法赋值即可,有两种实现方式:
- 方式一:直接使用main方法中已声明的
third变量修改third.setName("sam"); - 方式二:如果未直接持有third变量,从顶层First实例逐层获取关联对象后修改(符合Java封装规范,推荐)
first.getSecond().get(0).getThird().setName("sam");
修改后完整测试类代码
import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { Third third = new Third(); third.setName("john"); Second second = new Second(); List<Second> list = new ArrayList<>(); list.add(second); second.setThird(third); First first = new First(); first.setSecond(list); // 修改name为sam,以下两种写法二选一即可 // 写法1 third.setName("sam"); // 写法2 // first.getSecond().get(0).getThird().setName("sam"); System.out.println(first.getSecond().get(0).getThird().toString()); } }
运行后输出结果为:Third{name='sam'},修改生效。
内容的提问来源于stack exchange,提问作者Saurabh Kumar Singh
相关产品推荐
相关产品推荐

