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使用一个常量