【发布时间】:2018-09-19 23:56:33
【问题描述】:
我有以下实用程序方法,并且我正在使用多个 if 语句并遇到认知复杂性问题。我浏览了一些链接,但我无法理解如何在不影响使用此方法的用户的情况下更改代码。
public static boolean isWrapperValid(WrapperClass wrapper, boolean isTechnicalToken){
String key=null;
boolean isValidWrapper = false;
if (wrapper != null && wrapper.length() > 7
&& wrapper.substring(0, 6).equalsIgnoreCase("XYZ"))
{
wrapper= wrapper.substring(7, wrapper.lastIndexOf('.')+1);
}
if(wrapper != null && wrapper.equalsIgnoreCase("TFR")) {
isValidWrapper=Boolean.TRUE;
}
try {
key = wrapper.getKey();
}
catch (Exception exception) {
return isValidWrapper;
}
if(key!=null) {
Date tokenExpiryTime = key.getExpiresAt();
if(tokenExpiryTime!=null) {
return isValidWrapper;
}
String algorithm=key.getAlgorithm();
if(!DESIRED_ALGO.equals(algorithm)) {
return isValidWrapper;
}
String value6=key.getType();
if(!DESIRED_TYPE.equals(value6)) {
return isValidWrapper;
}
if(key.getValue1()!=null && key.getValue2().size()>0 && key.getValue3()!=null && key.getValue4()!=null && key.getValue5()!=null) {
isValidWrapper=Boolean.TRUE;
}
}
return isValidWrapper;
}
请分享您对重构此代码的建议。
【问题讨论】:
-
(wrapper != null && wrapper.length() > 7 && wrapper.substring(0, 6).equalsIgnoreCase("XYZ"))==false。除非“XYZ”实际上不是“XYZ”。 -
这永远不会是真的
wrapper.substring(0, 6).equalsIgnoreCase("XYZ")。因为您创建了一个长度为六个字符的子字符串 (wrapper.substring(0, 6))。因此它永远不能等于XYZ。 -
@SubOptimal 这正是我写上面评论时的想法。尽管如此,它还是有可能的,因为我们并不确切知道
WrapperClass是什么。可能WrapperClass.substring()并没有像我们认为的那样做! -
@DodgyCodeException 好点。没想到。
-
@DodgyCodeException "XYZ" 我一直只是不显示原始值.. 请忽略这些东西