Я спрашивал себя, как вы можете выразить эту разницу в Java.
Просто не используйте префикс get
в методе, так как обычно это означает, что метод будет дешевым (поскольку получатели обычно только получают доступ к полям, делегируют другим получателям или выполняют довольно простые вычисления на основе других получателей) , Например, если класс имеет этот интерфейс:
class Blob {
long getLength() { ... }
ByteBuffer getBytes() { ... }
Sha1Checksum getChecksum() { ... }
}
... может показаться, что получение длины, содержимого и контрольной суммы из Blob
одинаково дорого. Если мы сделали это, вместо этого:
interface Blob {
long getLength() { ... }
ByteBuffer getBytes() { ... }
Sha1Checksum calculateChecksum() { ... }
}
... становится ясно (э-э), что мы можем ожидать, что calculateChecksum()
будет дороже, чем другие операции, так как его название говорит о том, что он собирается сделать больше, чем просто получить что-то.
В определенной степени сложность - это проблема реализации, которую не следует видеть в интерфейсе (может быть, я решительно рассчитываю контрольную сумму при создании Blob
?), Но бывают случаи, когда это имеет смысл провести различие.