Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 什么';这种方法有什么错?_Java_String_Coding Style_Constants - Fatal编程技术网

Java 什么';这种方法有什么错?

Java 什么';这种方法有什么错?,java,string,coding-style,constants,Java,String,Coding Style,Constants,一个新的代码审查过程已经就位,现在我的团队不能将字符串声明为局部变量,否则提交将无法通过代码审查。我们现在使用常量来代替 所以这是绝对不允许的,即使我们确信这根绳子永远不会在任何其他地方使用 String operationId = "create"; 这是应该使用的: private static final String OPERATION_ID = "create"; 虽然我完全同意对代码中出现+2次的字符串使用常量。。。我只是觉得如果字符串只使用一次,完全没有能力在适当的位置声明它

一个新的代码审查过程已经就位,现在我的团队不能将字符串声明为局部变量,否则提交将无法通过代码审查。我们现在使用常量来代替

所以这是绝对不允许的,即使我们确信这根绳子永远不会在任何其他地方使用

String operationId = "create"; 
这是应该使用的:

private static final String OPERATION_ID = "create";
虽然我完全同意对代码中出现+2次的字符串使用常量。。。我只是觉得如果字符串只使用一次,完全没有能力在适当的位置声明它就太过分了

为了明确起见,以下所有内容在任何情况下都是不允许的:

  • String div=“div1”
  • Catch(异常示例){LOGGER.log(“csv文件已损坏”)}
  • 字符串串联
    String str=“something…”+someVar+“something”
    。。。我们将用
    %s
    替换
    someVar
    ,将整个内容声明为全局字符串,然后使用
    string.format(..)

  • if(name.equals(“奥迪”){….}

  • String value=map.get(“key”)

有什么想法吗,伙计们?我想要一些强有力的论据。我准备接受任何有好论据支持的立场


谢谢。

首先,让我们抛开你的假设:所描述的方法没有本质上的错误

这不是字符串在多个地方使用,而是常量易于查找和记录,代码保持一致

真的,这在其他任何地方都没有用过?如果我把它改成字符串“甲壳虫汁”,就不会有任何东西坏了?如果有东西坏了,那么其他东西在使用这个常量…如果“其他东西”恰好是另一种语言的代码库,这就是为什么它们不共享字符串常量——这是例外,而不是规则。一致性


也就是说,我会以稍微不同的方式对一些事情进行标准化,但我仍然会对它们进行标准化:

我建议在枚举的构造函数中允许字符串文字:

public enum Operation {
    CREATE("create"),
    ...
}
因为这里,枚举是代码中引用的常量,而不是字符串文字。将常量声明为枚举或
私有静态最终字符串
等同于我,无需同时执行这两项操作

此外,我不会在任何地方使用这种模式,因为它会破坏IDE警告您缺少字符串的功能——例如,从.properties文件中查找字符串。当您在不存在的.properties文件中查找密钥时,许多IDE都会给您适当的警告,但额外的间接级别可能会破坏这一功能,具体取决于您的操作pon您的IDE有多智能

Catch(Exception ex){ LOGGER.log("csv file is corrupt") }
这对我来说是一个灰色地带-这是一个内部唯一的消息吗?日志是只有你,开发人员看到过的,还是它们也是为了用户的利益

如果只是针对应用程序的开发人员,这些可能不需要本地化


如果您确实希望用户查看日志,那么应该将它们外部化到.properties文件中。

首先,让我们放弃您的假设:所描述的方法没有本质上的错误

这不是字符串在多个地方使用,而是常量易于查找和记录,代码保持一致

真的,这在其他任何地方都没有用过?如果我把它改成字符串“甲壳虫汁”,就不会有任何东西坏了?如果有东西坏了,那么其他东西在使用这个常量…如果“其他东西”恰好是另一种语言的代码库,这就是为什么它们不共享字符串常量——这是例外,而不是规则。一致性


也就是说,我会以稍微不同的方式对一些事情进行标准化,但我仍然会对它们进行标准化:

我建议在枚举的构造函数中允许字符串文字:

public enum Operation {
    CREATE("create"),
    ...
}
因为这里,枚举是代码中引用的常量,而不是字符串文字。将常量声明为枚举或
私有静态最终字符串
等同于我,无需同时执行这两项操作

此外,我不会在任何地方使用这种模式,因为它会破坏IDE警告您缺少字符串的功能——例如,从.properties文件中查找字符串。当您在不存在的.properties文件中查找密钥时,许多IDE都会给您适当的警告,但额外的间接级别可能会破坏这一功能,具体取决于您的操作pon您的IDE有多智能

Catch(Exception ex){ LOGGER.log("csv file is corrupt") }
这对我来说是一个灰色地带-这是一个内部唯一的消息吗?日志是只有你,开发人员看到过的,还是它们也是为了用户的利益

如果只是针对应用程序的开发人员,这些可能不需要本地化


如果您确实希望用户查看日志,那么应该将它们外部化到.properties文件中。

当值/文字被多次使用时,为值/文字定义一个常量是一种很好的编码风格

强制的编码样式强制您为每个字符串文本使用一个常量

这种编码风格的良好效果是:所有真正应该声明为常量的字符串文本现在都声明为常量

这种编码风格的不良含义是:你——开发人员——无法决定字符串文字是否应该定义为常量。这是一个沉重的打击


因此,您应该提出您的担忧,即编码样式的良好意图并不能弥补对开发人员资格的不信任。

当值/文字被多次使用时,为值/文字定义一个常量是一种良好的编码样式

强制的编码样式强制您为每个字符串l使用一个常量