Java中复杂getter的命名约定

Sim*_*mon 2 java naming-conventions getter-setter

我正在阅读这篇关于.NET中属性和方法的使用的MSDN 文章.它指出了为什么以及何时使用属性或方法.

属性意味着像字段一样使用,这意味着属性不应该在计算上复杂或产生副作用.

否则应该使用方法.

我问自己如何在Java中表达这种差异.

你有什么意见?

gus*_*afc 5

我问自己如何在Java中表达这种差异.

只是不要get在方法上使用前缀,因为它通常意味着该方法将是便宜的(因为getter通常只访问字段,委托给其他getter,或者基于其他getter执行相当简单的计算).例如,如果一个类有这个接口:

class Blob {
    long getLength() { ... }
    ByteBuffer getBytes() { ... }
    Sha1Checksum getChecksum() { ... }
}
Run Code Online (Sandbox Code Playgroud)

......似乎从中获取长度,内容和校验和Blob同样代价高昂.如果我们这样做,而是:

interface Blob {
    long getLength() { ... }
    ByteBuffer getBytes() { ... }
    Sha1Checksum calculateChecksum() { ... }
}
Run Code Online (Sandbox Code Playgroud)

......很明显(呃)我们可以期望calculateChecksum()比其他业务更昂贵,因为它的名字说它不仅仅是获得一些东西.

在某种程度上,复杂性是一个实现问题,不应该在界面中看到(也许我决定在Blob构造时急切地计算校验和?),但有时候区分是有意义的.