2011-11-11 51 views
2

當我在我的Java代碼上運行PMD時,它顯示的錯誤消息之一是 「STWeb類的循環複雜度爲20」。 通常我的Java類是這樣Java代碼PMD抱怨循環複雜性,共有20個

public class STWeb implements STWebService { 

    public String getData(RequestData request) 
    { 
    validate(request); 
    } 

    public boolean validate(Data[] formdata) 
    { 
    if(formdata.length==1) 
    //do this 
    else if(formdata.length==3) 
    //do this 
    else if(formdata.length==4) 
    //do this 
    else if(formdata.length>4) 
    //do this 
    else if(formdata.length==2) 
    { 
     if(formdata[0].getName.equals("OIY")) 
     { 
     } 
    /And many more if else here 
    } 
    } 
} 

正如你所看到的,按我的業務需求,我需要的類 很多,如果的,如果別人這樣的理由cyclocomplexity已經ncreased,請告訴代碼我 什麼是可行的方法按照這個標準?

+0

嘗試縮進代碼,以便我們可以看到發生了什麼 – Dan

回答

7

環圈複雜性測量不應該用於質量控制,而應該用作錯誤代碼的指示器/警告。您應該更關注它背後的代碼,而不是CC本身的價值。

儘管可以通過重構將其分解爲更小的方法來降低方法的複雜性,但整個類仍然會具有相同的CC。

只要代碼是可讀並且對下一個必須看它的人有意義,那麼擁有更高的CC應該不是那麼重要。

0

循環複雜性似乎表明存在的代碼路徑的數量。所以如果你的要求說你必須使用許多ifs,如果elses,那麼你可以忽略這個消息。

0

它幫助,如果你有這樣的事情:

if (a) { 
    return true; 
} else if (b) { 
    return true; 
} else if (c) { 
    return true; 
} else { 
    return false; 
} 

那麼,你這個替換它:

return a || b || c; 
1

只是想補充一點,有時有可能解決這些問題與對象 - 或建築結構。您可以爲應該返回的數據聲明一個「Wrapper-Class」。但總有一些時候,你不能無噸的對象,這反過來也導致無法讀取的代碼^^」

編輯腹脹代碼將此情況:該SO-後是[nice example with ENUMS]