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

Java项目:如何访问Person对象ArrayList内Address的get/set方法

解决方案:访问Person对象中的Address属性

问题核心是你的Person类没有对外暴露内部存储Address的ArrayList的访问途径,或者访问权限设置不当。按以下步骤修改即可解决:

1. 完善Person类的封装与访问方法

首先确保Person类中的Address列表是私有(符合面向对象封装原则),并添加对应的获取方法,同时可以新增添加Address的便捷方法:

import java.util.ArrayList;

public class Person {
    private String name;
    // 私有存储Address的列表,避免外部直接篡改
    private ArrayList<Address> addresses;

    public Person(String name) {
        this.name = name;
        this.addresses = new ArrayList<>(); // 初始化列表
    }

    // 你已实现的姓名属性操作方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 关键:添加获取Address列表的方法
    public ArrayList<Address> getAddresses() {
        // 两种返回方式可选:
        // 1. 返回原列表引用:外部可直接修改列表内容,灵活性高
        return addresses;
        // 2. 返回列表副本:外部修改不影响Person内部数据,安全性高
        // return new ArrayList<>(addresses);
    }

    // 可选:新增添加Address的便捷方法,更符合封装逻辑
    public void addAddress(Address address) {
        this.addresses.add(address);
    }
}

2. 在Main类中访问Address属性

有了上面的方法后,就可以通过Person对象获取Address列表,进而调用Address的get/set方法:

public class Main {
    public static void main(String[] args) {
        // 创建Person实例
        Person person = new Person("Damir");

        // 创建并添加Address对象
        Address homeAddr = new Address();
        homeAddr.setZip("98765");
        homeAddr.setCity("Seattle");
        homeAddr.setStreet("Main St");
        person.addAddress(homeAddr);

        // 访问第一个Address的属性
        Address firstAddr = person.getAddresses().get(0);
        System.out.println("初始邮编:" + firstAddr.getZip());
        // 修改城市属性
        firstAddr.setCity("Portland");
        System.out.println("修改后的城市:" + firstAddr.getCity());

        // 遍历所有Address并输出信息
        for (Address addr : person.getAddresses()) {
            System.out.printf("街道:%s,城市:%s,邮编:%s%n", 
                addr.getStreet(), addr.getCity(), addr.getZip());
        }
    }
}

3. 额外建议

  • 如果需要严格控制Person内部Address列表的修改,优先选择返回列表副本的方式,避免外部代码意外篡改Person的内部数据。
  • 若业务场景不需要外部直接操作整个列表,也可以在Person类中单独封装针对Address属性的操作方法(比如getAddressCity(int index)、updateAddressZip(int index, String newZip)),进一步隐藏内部实现细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:45:36