新的代码审核流程已经到位,现在我的团队不得将字符串声明为本地变量,否则提交将不会通过代码审核。我们现在改为使用常量。
所以这绝对是不允许的,即使我们确定字符串永远不会在任何其他地方使用
String operationId = "create";
这应该是应该使用的:
private static final String OPERATION_ID = "create";
虽然我完全同意在代码中出现+2次的字符串使用常量...但我觉得如果它只使用一次就完全没有能够声明字符串的能力。
为了确保清楚,以下所有内容在任何情况下都不允许:
String div = "div1";
Catch(Exception ex){ LOGGER.log("csv file is corrupt") }
字符串连接String str = "something ...." + someVar + "something"
...我们要用someVar
替换%s
,将整个事物声明为全局字符串,然后再使用String.format(....)
< / p>
if( name.equals("Audi" ){....}
String value = map.get("key")
任何想法的家伙?我想要一些有力的论据。我已经准备好接受任何有良好争论支持的立场。
感谢。
答案 0 :(得分:0)
首先,让我们抛弃你的假设:所描述的方法没有任何内在的错误。
这不是关于字符串在多个地方使用的问题,而是关于常量易于查找和记录,以及您的代码一致。
private static final String OPERATION_ID = "create";
真的,这个在任何地方都没用过吗?如果我将其更改为字符串&#34; beetlejuice&#34;?如果有什么东西会破坏,那么其他东西就会使用这个常数...如果&#34;其他东西&#34;碰巧是不同语言的代码库,这就是他们不共享字符串常量的原因 - 这是例外情况,而不是规则。一致性!
那就是说,有一些事情我会以稍微不同的方式标准化,但我仍然会将它们标准化:
我建议在枚举构造函数中允许使用字符串文字:
public enum Operation {
CREATE("create"),
...
}
因为在这里,枚举是代码中引用的常量,而不是字符串文字。将常量声明为枚举或private static final String
等同于我,并且不需要同时执行这两种操作。
此外,我不会在任何地方使用此模式,因为它会破坏您的IDE警告您缺少字符串的能力 - 例如,查找.properties文件中的字符串。当您在.properties文件中查找不存在的密钥时,许多IDE会给您正确的警告,但是额外的间接级别可能会破坏,这取决于IDE的智能程度。
Catch(Exception ex){ LOGGER.log("csv file is corrupt") }
这对我来说有点灰色 - 这只是一个内部消息吗?日志只是您,开发人员才能看到的,还是用户的利益?
如果仅适用于应用程序的开发人员,则可能不需要进行本地化。
如果您希望用户查看日志,则应将它们外部化为.properties文件。
答案 1 :(得分:0)
当多次使用值/ literal时,为值/文字定义常量是一种很好的编码风格。
强加的编码风格强制您为每个字符串文字使用常量。
该编码风格的良好效果是:所有真正应该声明为常量的字符串文字现在都被声明为常量。
该编码风格的错误含义是:您 - 开发人员 - 无法决定是否应将字符串文字定义为常量。这是一个沉重的打击。
因此,您应该提出您的担忧,即编码风格的良好意图不能弥补您的开发人员资格中的不信任。