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

Java中重复访问对象字段值的最佳实践及场景方案对比

Java中重复访问对象字段值的最佳实践

先看你给出的类定义:

public class Book {
  private Author author;
  private int pageCount;
  // ... getters and setters
}
public class Author {
  private String name;
  private int age;
  // ... getters and setters
}

针对重复访问某本书的作者名称的场景,最佳选择是doSomethingC,原因如下:

  • 先看doSomethingA的问题:
    这个方法里重复调用book.getAuthor().getName(),如果getAuthor()或者getName()不是简单的字段返回(比如包含懒加载、计算逻辑、日志输出),每次调用都会重复执行这些逻辑,造成不必要的性能损耗。另外如果book.getAuthor()返回null,两次调用都会抛出空指针异常,调试时还得排查两次调用的问题,反而麻烦。而且代码重复,看起来也不够简洁。

  • 再看doSomethingB:
    它把Author对象缓存下来,减少了book.getAuthor()的调用次数,但还是重复调用author.getName()。如果getName()有复杂逻辑(比如从数据库动态获取、字符串拼接处理),同样会重复执行。而且如果author是null,两次调用getName()还是会抛异常,虽然比A好一点,但没解决根本问题。

  • 最后看doSomethingC:
    它直接把最终需要的作者名称缓存到局部变量里,只调用一次book.getAuthor()和一次getName()。不管这两个getter方法里有没有额外逻辑,都只会执行一次,性能最优。而且如果出现null的情况,只会在获取authorName的时候抛出一次异常,方便定位问题。代码上也更清晰,重复使用变量比重复调用嵌套方法可读性更强,后续如果要修改作者名称的使用逻辑,直接改变量相关的代码就行,维护成本更低。

总的来说,重复访问同一个对象的字段值时,最好把最终需要的结果缓存到局部变量里,既提升性能,又让代码更易读、易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:56:29