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

Java同一个类中如何访问另一方法内定义的多个对象

问题根因

  • 你在loadData()中定义的e1/e2/e3属于方法局部变量,作用域仅限于loadData()方法内部,方法执行结束后这些变量就会被销毁,其他方法完全无法访问。
  • 你尝试的new loadData().e1写法不符合Java语法:loadData()是类的成员方法不是类,不能用new关键字创建,且局部变量本身就不支持方法外直接访问。

解决方案

不需要修改现有方法的参数,只要把三个Employee对象提升为Model类的成员变量即可,类内部的所有非静态方法都可以直接访问成员变量,同时可以保持loadData()负责数据加载、getData()负责数据查询的独立性:

修改后的代码如下:

public class Model {
    // 声明为类的成员变量,作用域覆盖整个类的非静态方法
    private Employee e1;
    private Employee e2;
    private Employee e3;

    public Model() {
        loadData();
    }

    public void loadData() { 
        e1 = new Employee("John Smith", "California, PA.", "Dr. Robertson junior.");
        e2 = new Employee("Kyle Alston",  "State College, PA.", "SmithTown");
        e3 = new Employee("Tommy Smith", "Baskeville, PA.", "Chicago");
    }
    
    // 注意:原方法返回值类型写的是String,但e1/e2/e3是Employee类型,这里需要修正返回值类型
    // 如果你确实需要返回字符串,可以返回Employee对象的对应属性,比如e1.getName()
    public Employee getData(int n)  { 
        if(n == 1){
            return e1;
        }
        if(n == 2){
            return e2;
        }
        if(n == 3){
            return e3;
        }
        // 建议补充异常返回或者默认返回,避免n不在1-3范围时报错
        return null;
    }
}

补充说明

如果你要求getData()必须返回String类型,可以把返回部分改成返回Employee对象的对应字符串属性即可,比如假设Employee类有getName()方法获取姓名,就可以写return e1.getName();。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:01