Java 使用幻数(1)或全局常量的检查列表大小?
我正在与一位同事就以下代码进行争论:Java 使用幻数(1)或全局常量的检查列表大小?,java,design-patterns,Java,Design Patterns,我正在与一位同事就以下代码进行争论: private static final byte ONE_ELEMENT = 1; private boolean isListSizeEqualsOne(List<MyClass> myList) { return myList.size() == ONE_ELEMENT; } 私有静态最终字节1\u元素=1; 专用布尔值isListSizeEqualsOne(列表myList){ 返回myList.size()==一个_元素; }
private static final byte ONE_ELEMENT = 1;
private boolean isListSizeEqualsOne(List<MyClass> myList) {
return myList.size() == ONE_ELEMENT;
}
私有静态最终字节1\u元素=1;
专用布尔值isListSizeEqualsOne(列表myList){
返回myList.size()==一个_元素;
}
我认为这种代码可以减少关于一个幻数的警告,但同时不必要地增加了混乱。我建议改为内联全局变量:
private boolean isListSizeEqualsOne(List<MyClass> myList) {
return myList.size() == 1;
}
private boolean isListSizeEqualsOne(列表myList){
返回myList.size()==1;
}
有支持/反对这个例子的文献吗 我认为代码的问题已经在方法本身了。与注释一样,方法名称不应指明代码的作用,而应指明原因。换句话说,它应该指明它提供的功能,而不是它的实现 也就是说,它应该表示此方法在系统中所起的作用。因此,不要使用名称isListSizeEqualsOne,而是使用一个指示“为什么”的名称。例如,
resultIsUnique
,或errorReturned
(如果您使用的API中包含单个元素的列表表示错误)
然后常量的命名如下所示:
:常量resultIsUnique
UNIQUE\u RESULT\u COUNT=1
:常量errorReturned
ERROR\u RESULT\u COUNT=1
如果您需要含义明显的常量(例如通过将大小与零进行比较来检查空列表),那么我认为纯内联值完全可以。如果方法名称表示它正在与值1进行比较,那么我认为不需要常量。如果意图明确,那么就不需要常数了。@Damiano
newinteger(1)代码>只是为了摆脱警告?哎哟如果你真的想使用类似的东西(因此不需要取消装箱),你应该使用Integer.valueOf(1)
,因为这至少不会每次都创建一个新对象。这可能属于。也就是说,如果这是有问题的函数,我真的认为编写myList.size()==1更容易代码>无处不在,而不是包装器调用。如果(!list.isEmpty()&&&(list.size()*list.size()==list.size()),我建议使用。但说真的,我想知道要多久才会有人想出这样的东西,只是为了让一些武断的“警告”闭嘴。“规则是为了智者的指引和愚者的服从。”(D.贝德)谢谢你的回答,并指出了你对警告的个人观点(顺便说一句,我同意你的观点)。