代码之家  ›  专栏  ›  技术社区  ›  Aaron

在重写ToString时,最好使用getter方法还是直接访问私有字段?[副本]

  •  5
  • Aaron  · 技术社区  · 15 年前

    我见过两种方法,但从未听说一种方法因任何特殊原因比另一种方法更受欢迎。

    public String toString() {
      return this.field1 + " " + this.field2;
    }
    

    对战

    public String toString() {
      return getField1() + " " + getField2();
    }
    

    我在示例中使用了字符串连接来保持代码简短。

    7 回复  |  直到 15 年前
        1
  •  9
  •   Andreas Dolk    15 年前

    使用吸气剂,如果你有!

    也许,有一天您更改了代码,这样getter不仅可以返回字段值,还可以做更多的事情,或者以不同的方式创建结果。那么你会更高兴你一直使用吸气剂。

    但和往常一样,我的建议中也有一些摘录—您对toString()方法的期望是什么?如果您允许重写getter方法,您希望它使用classes字段还是-maybe override-getter方法的结果。

    所以,和往常一样,这取决于,但是我会使用getter,除非我有充分的理由直接访问这些字段。

        2
  •  3
  •   danben    15 年前

    如果在返回字段值的基础上提供任何额外的逻辑(如大写字符串或类似的东西),那么最好使用访问器方法。如果您的类被设计为被扩展,那么我倾向于使用访问器,因为它们可能被重写。

        3
  •  2
  •   David Soroko    15 年前

    把吸气剂用在绳子上是一种过分的杀伤力。而且不应该将ToString用于非调试目的。

        4
  •  2
  •   sateesh    15 年前

    我更喜欢直接访问私有变量的方法。吸气剂方法会增加杂波。

        5
  •  1
  •   Hackles    15 年前

    你有吗? 原因 使用getter方法?他们有什么有趣的事吗?

    …或者您只是使用它们公开内部数据,而实际上不公开字段本身(穷人的封装)?

    如果是前者,那么当然也要在这里使用它们!如果是后者,那就没关系了——你可能无论如何都想使用它们, 以防万一 你曾经给过他们一个真正的目的,但如果不是这样,那就不会有什么区别。

        6
  •  0
  •   user177800    15 年前

    使用 String.format("%s %s", this.getField1(), this.getField2()); 这是最好的方法,因为 .getXXX() 方法中可能包含您希望将空引用转换为空字符串的逻辑,或者通过盲目访问私有实例而无法获得的某些默认值。这是最安全的方法,以防万一有人出现并在 GETXXX() 方法,他们不认为更新 .toString() 实现。

        7
  •  0
  •   Uri    15 年前

    如果您的类具有字段的getter和setter,那么无论您是使用getter和setter还是直接访问字段,您都应该在该类的整个实现过程中保持一致。混合抽象层次通常没有意义。否则,你怎么能合理地在某些地方而不是在其他地方使用它们呢?此外,如果getter的实现方式发生了变化,那么最终可能会得到一些微妙的包。toString()是实现的一部分,因此它也应该是一致的。

    在性能方面,这并不重要——无论如何,您的琐碎的getter和setter应该是最终的方法,所以它们应该是内联的。如果它们不是最终的,您应该问自己为什么,并且可能避免直接访问字段,除非这确实是您要做的。