Boh*_*ian 3 java coding-style contains
假设你想测试输入是否是几个常量字符串之一,并忽略性能,它是一个反模式代码:
if ("yes oui ja da".contains(answer)) {
// answer was in the affirmative
}
Run Code Online (Sandbox Code Playgroud)
而不是更传统的:
private static List<String> affirmativeAnswers = Arrays.asList("yes", "oui", "ja", "da");
if (affirmativeAnswers.contains(answer)) {
// answer was in the affirmative
}
Run Code Online (Sandbox Code Playgroud)
这是一个更少的代码,更容易阅读,但它是一个"黑客"?
为了更安全,如果您担心部分匹配,可以将其编码为:
if (",yes,oui,ja,da,".contains(',' + answer + ','))
Run Code Online (Sandbox Code Playgroud)
它的代码仍然少得多(虽然变得丑陋)
出于各种原因,我认为这是一个丑陋的黑客攻击:
("yes oui ja da".contains(" "))
会返回true - 可能不是你想要的.这是我认为最大的问题.即使您开始添加更多技巧(如最近编辑中的逗号),您仍然需要考虑令人讨厌的角落案例.HashMap
或HashSet
哪个O(1)
与O(n)
扫描连接的字符串相反.