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
相关产品推荐
相关产品推荐

