Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用幻数(1)或全局常量的检查列表大小?_Java_Design Patterns - Fatal编程技术网

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.贝德)谢谢你的回答,并指出了你对警告的个人观点(顺便说一句,我同意你的观点)。