将布尔值分解出来并从方法调用中缓存返回值有助于澄清代码.
此外,在逻辑表上绘制所有结果可以提供帮助.我用this tool来帮忙.
使用链接工具:
A: config.get("filterMode").equals("blacklist")
B: config.get("filterMode").equals("whitelist")
C: filterContainsName (see below)
该工具生成:
(!A && !B) || (!A && C) || (A && !C)
这导致下面的代码(使用(B& C))替换(!A&& C)的小调整:
boolean filterContainsName = itemFilter.contains(event.getItem().getName());
boolean useBlacklist = config.get("filterMode").equals("blacklist");
boolean useWhitelist = config.get("filterMode").equals("whitelist");
if (!config.get("safeMode") || event.isSafe()) {
if((!useBlackList && !useWhiteList) ||
( useWhiteList && filterContainsName) ||
( useBlackList && !filterContainsName)) {
item.process();
}
}