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

Java中复杂getter的命名约定

  •  2
  • Simon  · 技术社区  · 14 年前

    我在看这个MSDN article 关于.NET中属性和方法的用法。它指出了为什么以及何时使用属性或方法。

    字段,这意味着属性 不是计算复杂或

    否则就应该使用方法。

    你的意见是什么?

    4 回复  |  直到 14 年前
        1
  •  5
  •   gustafc    14 年前

    我在问自己如何用Java表达这种差异。

    get 方法的前缀,因为它通常意味着方法将是廉价的(因为getter通常只访问字段、委托给其他getter,或者基于其他getter执行相当简单的计算)。例如,如果类具有此接口:

    class Blob {
        long getLength() { ... }
        ByteBuffer getBytes() { ... }
        Sha1Checksum getChecksum() { ... }
    }
    

    Blob

    interface Blob {
        long getLength() { ... }
        ByteBuffer getBytes() { ... }
        Sha1Checksum calculateChecksum() { ... }
    }
    

    ... 很明显,我们可以期望 calculateChecksum() 要比其他业务更昂贵,正如它的名字所说,它要做的不仅仅是得到一些东西。

    在某种程度上,复杂性是一个不应该在接口中看到的实现问题(可能我决定在 但在某些情况下,做出区分是有意义的。

        2
  •  3
  •   abyx    14 年前

    我只是不同意那篇文章所说的。属性是语法上的糖分,否则就只能使用字段。

    getters/properties的要点是 封装 -用户不知道它是一个简单的字段、每次计算的值还是一个随机值。

        3
  •  3
  •   Oak    14 年前

    视情况而定。如果所有的操作都是完全内部的,那么 getSomething() 即使对于复杂的实现也没问题——getters/setters/properties的关键是封装实现细节并隐藏它们,即使将来它们会变得复杂。

    如果吸气剂有 但是,我可能不会使用简单的 惯例,避免混淆。也许我会用 updateAndReturn() getAndComplexify() getFromWeb()

        4
  •  2
  •   Xorty    14 年前

    C#属性基本上是Java getter和setter的结合体。如果我需要对一个实例同时使用geter和setter,我总是选择property。在java中,我没有这个选项。