在Java的for-each循环中使用getter方法是否不合规范?
在for-each循环中使用getter方法完全符合规范
首先明确:在for-each循环里调用getter方法绝对不是不合规范的操作,反而这是Java面向对象编程中遵循封装原则的正确做法。
你的示例代码里直接访问了p.name和p.number这两个字段,这才是不符合Java封装规范的写法——直接暴露类的成员字段会破坏封装性,后续如果需要对字段的取值做逻辑处理(比如格式转换、校验),或者修改字段的存储方式,就需要修改所有直接访问该字段的代码,维护成本极高。
正确的做法示例
先给Program类添加对应的getter方法:
public class Program { private int number; private String name; public Program(int number, String name) { this.number = number; this.name = name; } // getter方法 public int getNumber() { return number; } public String getName() { return name; } }
然后在for-each循环中调用getter方法:
public static void main(String[] args) { ArrayList<Program> programs = new ArrayList<>(); Program program1 = new Program(1, "National Geographic"); Program program2 = new Program(12, "TV2"); Program program3 = new Program(24, "Disney Channel"); Program program4 = new Program(33, "MTV"); programs.add(program1); programs.add(program2); programs.add(program3); programs.add(program4); for(Program p : programs) { System.out.println(p.getName() + " " + p.getNumber()); } }
为什么推荐用getter?
- 遵循封装原则:隐藏类的内部实现细节,只对外提供可控的访问接口。
- 便于扩展:如果后续需要给
name字段添加前缀,或者对number做格式化,只需要修改getName()或getNumber()方法,不需要改动所有调用处的代码。 - 符合JavaBean规范:这是Java开发中的通用约定,能让你的代码更易被其他开发者理解和维护。
内容的提问来源于stack exchange,提问作者Nidos
相关产品推荐
相关产品推荐

