Java 重构方法降低了开关案例的认知复杂性

Java 重构方法降低了开关案例的认知复杂性,java,spring,algorithm,spring-boot,jackson,Java,Spring,Algorithm,Spring Boot,Jackson,您好,我很难降低认知复杂性有什么方法可以降低吗? 任何帮助都将不胜感激。由于声纳干扰,我无法传递代码 多谢各位 private void addSth(List<Integer> myStatus, List<String> myId, String taskOwner, StringBuilder queryStatement, List<Object> args) { if (null != myStatus&&a

您好,我很难降低认知复杂性有什么方法可以降低吗? 任何帮助都将不胜感激。由于声纳干扰,我无法传递代码

多谢各位

private void addSth(List<Integer> myStatus, List<String> myId, String taskOwner, StringBuilder queryStatement, List<Object> args) {
        
        if (null != myStatus&& myStatus.size >0) {
             queryStatement.append("and (");
        for(int i = 1; i <= status.size(); i++) {
          int status = myStatus.get(i-1);
    
           switch (status) {
            case 1:
             StringBuilder potSth = new StringBuilder();
             if (null != myId && myId.size() > 0) {
             pothSth.append("(");
    
           for (int j=1; j <= myId.size(); j++) 
               pothSth.append(" ? ");
          if (j < myId.size()) 
              pothSth.append(", ")
                
           
           pothSth.append(")");
             
          
          queryStatement.append("sth");
          queryStatement.append(pothSth);
         queryStatement.append(")\n");

         args.add(1);
        
        for (String pOwner : ownerId) {
          args.add(pOwner);
          
     break;

     case 2:
     case 3:
         queryStatement.append("or ");
       args.add(status);
       args.add(taskOwner);
     

  if (i < myStatus.size ) {
  queryStatement.append("or ");
 
   
private void addSth(List myStatus、List myId、String taskOwner、StringBuilder queryStatement、List args){
if(null!=myStatus&&myStatus.size>0){
queryStatement.append(“and”(“);
对于(int i=1;i 0){
第四款附加(“(”);

对于(int j=1;jSonarint,Sonarint根据三个因素测量认知复杂性:

  • 忽略允许将多个语句简化为一个语句的结构
  • 代码线性流中每个中断的增量(添加一个)
  • 嵌套流中断结构时的增量
  • 资料来源:第4页

    我建议将
    addSth
    方法分解为几个较小的方法,可能用于处理状态,附加到
    pothth
    和附加到
    queryStatement


    另外,它的结尾似乎缺少了一些大括号,所以我不能完全确定这段代码在做什么。正如Jonny所说,一些上下文和格式将不胜感激。:)

    你能把你的问题包括在你的所有代码中吗?你能把你的代码格式化以便更容易理解吗?谢谢你的回答。代码中的花括号是正确的,但是,我不能把它放在这里,你能不能也写下如何将我的方法分解成更小的方法?既然没有任何右括号,我不确定嵌套的int是什么o什么,但是类似于
    private void addSth(…args…{appendAndIfValidStatus(queryStatement)…appendCharBasedOnStatus(pothth)…addPOwner(args,pOwner)…}
    (为奇怪的格式道歉,迷你降价对我来说是新的)