我的问题是 -
我有两个字符串变量site_inclusion
和site_exclusion
。如果site_inclusion
有值,那么我不关心site_exclusion
包含的值。也就是说site_inclusion
会覆盖site_exclusion
。但是,如果site_inclusion
为null
且site_exclusion
有值,则我想检查site_exclusion
。
更确切地说:
site_inclusion
和site_exclusion
都是null
,请将useTheSynthesizer
设为true
; site_inclusion
不是null
且与regexPattern
匹配,则将useTheSynthesizer
设置为true
。我并不关心site_exclusion
中的价值观。site_inclusion
为null
且site_exclusion
不是null
且site_exclusion
与regexPattern
不匹配,则设置为useTheSynthesizer
真实。我写了下面的代码,但不知怎的,我想,我在if / else循环中重复了一些东西。任何代码改进都将得到满足我的条件。
String site_inclusion = metadata.getSiteInclusion();
String site_exclusion = metadata.getSiteExclusion();
// fix for redundant data per site issue
if(site_inclusion != null && site_inclusion.matches(regexPattern)) {
useTheSynthesizer = true;
} else if(site_exclusion != null && !(site_exclusion.matches(regexPattern))) {
useTheSynthesizer = true;
} else if(site_inclusion == null && site_exclusion == null ) {
useTheSynthesizer = true;
}
答案 0 :(得分:6)
null
测试。if(test == true) flag = true
陈述的风格很差。您可以简单地说flag = test
。我的建议是:
if(site_inclusion != null)
{
useTheSynthesizer = site_inclusion.matches(regexPattern);
}
else if(site_exclusion != null)
{
useTheSynthesizer = ! site_exclusion.matches(regexPattern);
}
else
{
useTheSynthesizer = true;
}
您也可以在oneliner中执行此操作:
useTheSynthesizer = site_inclusion != null ? site_inclusion.matches(regexPattern) : (site_exclusion != null ? ! site_exclusion.matches(regexPattern) : true);
但我发现那种令人讨厌的阅读。
(注意,我假设useTheSynthesizer
原来是false
。这在您的代码或解释中并不明确,但我认为这个假设是安全的。)
答案 1 :(得分:2)
我会这样做:
boolean useTheSynthesizer;
if (siteInclusion == null && siteExclusion == null) {
useTheSynthesizer = true;
}
else if (siteInclusion == null) {
useTheSynthesizer = ( ! siteExclusion.matches(regexPattern) );
}
else {
useTheSynthesizer = siteInclusion.matches(regexPattern);
}
我还从变量名中删除了下划线,因为它们不符合java命名约定(并且它们是可怕的IMO)。
答案 2 :(得分:0)
你可以这样做。基本上我将所有条件都提取为小方法并作为OR条件。
String site_inclusion = metadata.getSiteInclusion();
String site_exclusion = metadata.getSiteExclusion();
if(isInclusionAndExclusionNull(site_inclusion, site_exclusion) || isSiteExclusionMatches(site_exclusion, regexPattern) || isSiteInclusionMatches(site_inclusion, regexPattern)) {
useTheSynthesizer = true;
}
private static boolean isInclusionAndExclusionNull(String site_inclusion,
String site_exclusion) {
return site_inclusion == null && site_exclusion == null;
}
private boolean isSiteExclusionMatches(String site_exclusion,
String regexPattern) {
return site_exclusion != null && !(site_exclusion.matches(regexPattern));
}
private boolean isSiteInclusionMatches(String site_inclusion,
String regexPattern) {
return site_inclusion != null && site_inclusion.matches(regexPattern);
}
答案 3 :(得分:0)
您可以使用2种方法灵活地处理包含和排除,如下所示。
callingMethod() {
boolean useTheSynthesizer = processSiteInclusions(site_inclusion, regexPattern);
if (useTheSynthesizer == false) {
useTheSynthesizer = processSiteExclusions(site_inclusion, regexPattern);
}
if (useTheSynthesizer == false) {
useTheSynthesizer = true;
}
}
private boolean processSiteInclusions(site_inclusion, regexPattern) {
boolean useSynthesizer = false;
if (site_inclusion != null && !site_inclusion.matches(regexPattern))
useSynthesizer = true;
return useSynthesizer;
}
private boolean processSiteExclusions(site_exclusion, regexPattern) {
boolean useSynthesizer = false;
if (site_exclusion != null && !site_inclusion.matches(regexPattern))
useSynthesizer = true;
return useSynthesizer;
}
答案 4 :(得分:0)
您好我认为您可以使用OR之类的东西进行改进,不仅可以使用AND或尝试像swicht这样的东西。
无论如何,您可以创建一些测试变量的函数,并且可以从主模块中编写这个令人困惑的代码。
例如,您可以在名为boolean TestingVariable ( String X, String Y);
例如: boolean TesteingVariable(String X,String Y){
if(X != null && X.matches(regexPattern)) {
return true;
} else if(Y != null && !(Y.matches(regexPattern))) {
return = true;
} else if(X == null && Y == null ) {
return = true;
}
};
通过这种方式,您的最终主模块代码将是这样的,您将避免主代码中的混淆代码:
String site_inclusion = metadata.getSiteInclusion();
String site_exclusion = metadata.getSiteExclusion();
// fix for redundant data per site issue
useTheSynthesizer = TesteingVariable (site_inclusion ,site_exclusion);
我认为你应该在函数中输入变量regexPattern
。
对不起我的英语我希望你能为所有人提供帮助,并为你提供帮助。