为什么不在Player
实例本身上有它?
public boolean isMocked() {
return this == Player.MOCKED;
}
player.isMocked()
似乎比someOtherService.isMockedPlayer(player)
.
Player
虽然 if是 a ,但它确实有点破坏了目的enum
,因为 thenMOCKED
是公开的。
另一方面,如果 ifPlayer
是一个实际的类并且 ifMOCKED
是您维护的内部静态实例,那么您可以isMocked()
按上述方式实现,您甚至不必向MOCKED
外界公开。
但关于一般原则 - 我们是否应该在方法名称中重复参数类型?
这得看情况。至少选择一个命名约定:
您希望清楚地传达您正在执行的操作的上下文和含义。
我认为您的示例本身有点多余,因为您正在检查实例的状态。因此,在这种情况下,将方法作为实例本身的一部分更有意义。但是一个更好的例子可能是一个类上的一个方法,它接受一个与类本身相同类型的参数。例如:
public void merge(BinarySearchTree tree) {
...
}
在这种情况下,不需要调用该方法mergeBinarySearchTree
;bst.mergeBinarySearchTree(other)
不传达任何比 更多的信息bst.merge(other)
。但即便如此,您也不能将此作为硬性规定。也许您的对象有许多不同类型的merge
操作,它们都接受不同的东西。在这种情况下,让方法包含要合并的事物的名称可能是有意义的……但这也可能取决于您如何设计对象模型。
tl; 博士这取决于;但一般来说,选择一个能够传达有关操作的语义和上下文的准确信息的名称,而不是不必要的冗余或冗长。