2017-07-24 267 views
2

我的問題與this非常相似,只是在SonarLint V3(squid:S1948)中遇到了此問題。SonarLint V3:「Serializable」類中的字段對於List接口應該是transient或serializable

我的代碼是:

public class Page<T> implements Serializable { 

    Summary summary; 
    List<T> elements; 

    public Page() { 
     summary = new Summary(); 
    } 

    public List<T> getItemsReceived() { 
     return elements; 
    } 

    public void setItemsReceived(List<T> list) { 
     this.elements = list; 
    } 

    public Summary getSummary() { 
     return summary; 
    } 

    public void setSummary(Summary summary) { 
     this.summary = summary; 
    } 

} 

摘要對象實現Serializable。

public class Summary implements Serializable { 

    int offset; 
    int limit; 
    long totalElements; 

    public int getOffset() { 
     return offset; 
    } 

    public void setOffset(int offset) { 
     this.offset = offset; 
    } 

    public int getLimit() { 
     return limit; 
    } 

    public void setLimit(int limit) { 
     this.limit = limit; 
    } 

    public long getTotalNumberOfElements() { 
     return totalElements; 
    } 

    public void setTotalNumberOfElements(long totalNumberOfElements) { 
     this.totalElements = totalNumberOfElements; 

    } 

} 

現在,如果我用ArrayList替換List,那麼SonarLint中的另一個警告就是我們應該使用接口而不是實現類。

我認爲這可能會在SonarQube中解決,但對於SonarLint我不知道。 這是一個錯誤還是我做錯了什麼?

+0

SonarQube和SonarLint共享負責檢測Java代碼問題的分析器https://redirect.sonarsource.com/plugins/java.html,因此如果在兩個工具中使用相同版本的SonarJava,則應該會看到相同的問題。現在關於你的代碼,哪個文件和哪一行是問題引發的? –

+0

Page類。 SonarLint報告列表不可序列化,因此應該是。如果我用ArrayList替換它,那麼它報告我應該使用接口。在這兩個方面我都得到了這個。我的問題:這是幾年前'SonarQube'中的一個bug,因爲我正在使用最新版本的'SonarLint',爲什麼這仍然在intellij中提供? –

+0

這與您鏈接的問題不是同一個問題。看到我的答案。 –

回答

2

SonarLint是正確的。問題是不能保證elements字段是可序列化的。您需要添加綁定在T型類型像這樣

public class Page<T extends Serializable> implements Serializable {} 

這樣的列表將被序列化,如果選擇了它的實現是序列化(這是在Java標準集合類型真)。

相關問題