织梦网站图片设置多大,查重网站开发,西安网站建设方案外包,2网站建设公司介绍 我团队中的一名初级程序员遇到了一个有趣的错误。 我已经不止一次看到它的症状。 这篇文章是寻找什么以及将来如何防止它。 我还将探讨该问题的不同解决方案。 病征 有问题的代码看起来做得不错。#xff1a; if(trouble ! null !trouble.isEmpty()) {
Syst… 介绍 我团队中的一名初级程序员遇到了一个有趣的错误。 我已经不止一次看到它的症状。 这篇文章是寻找什么以及将来如何防止它。 我还将探讨该问题的不同解决方案。 病征 有问题的代码看起来做得不错。 if(trouble ! null !trouble.isEmpty()) {
System.out.println(“fine here: ” trouble);
} else {
System.out.println(“not so fine here: ” trouble);
} 该代码将命中“ fine here”块但将输出“ null”值。 通过读取文件来设置变量。 调查中 我和开发人员查看了打印件并进行了几次测试但结果却相同。 我看了在哪里设置变量。 如果那里什么也没有它应该将值设置为null但是打印输出表明该值为null。 我有一个主意我们决定进行测试。 他更改了代码 if(trouble ! null !trouble.isEmpty() !trouble.equals(“null”)) {
System.out.println(“fine here”);
} else {
System.out.println(“not so fine here”);
} 每次测试都进行到“这里不太好”。 似乎该值被设置为字符串“ null”而不是值null。 学什么 说实话我以前已经看过了。 我花了大约一天的时间开始执行相同的代码来弄清楚它。 我从中了解到参数检查仍然是一件好事。 我发现有效的字符串检查可以在代码中的多个地方使用。 为了防止复制和粘贴反模式我将验证抽象为一个方法。 private static boolean isValidString(String test) {
boolean isValid (test ! null !test.isEmpty() !test.equals(“null”));
return isValid;
} 防止越来越长的验证行的下一步是将其抽象到验证对象。 这允许一个肮脏的单词列表。 public class StringValidator {
private ListString dirtyWords;public static final int ARRAY_SIZE 20;
public StringValidator() {
dirtyWords new ArrayList(ARRAY_SIZE);
}public boolean isValid(String test) {
boolean isValid false;
isValid (test ! null) !test.isEmpty();
if(isValid) {
for(String word: dirtyWords) {
if(word.equals(test)) {
isValid false;
break;
}
}
}
return isValid;
}public void addDirtyWord(String word) {
if(!isValidString(word)){
throw new IllegalArgumentException(word ” is not a good dirty word”);
}dirtyWords.add(word);
}private boolean isValidString(String test) {
return ((test ! null) !test.isEmpty());
}
}which leads to this parameter checking code:if(validator.isValid(trouble)) {
System.out.println(“fine here”);
} else {
System.out.println(“not so fine here”);
}结论 有时我们需要跳出框框思考一下问题。 让您对问题有第二眼的感觉并不难 这也许是发生的最好的事情。 我探索了最终创建验证器的解决方案该验证器无需经过冗长而令人困惑的测试即可包含脏词列表。 翻译自: https://www.javacodegeeks.com/2014/10/when-a-string-is-null-but-not-null.html