java-SonarLint V3:“ Serializable”类中的字段对于List接口应该是瞬态的或可序列化的

我的问题与this非常相似,所不同的是,我在SonarLint V3(squid:S1948)中遇到了此问题.

我的代码是:

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;
    }

}

摘要对象实现可序列化.

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我不知道.
这是一个错误还是我做错了什么?

解决方法:

SonarLint是正确的.问题是不能保证elements字段可序列化.您需要像这样添加绑定到T类型的类型

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

这样,如果为列表选择的实现是可序列化的,则该列表将是可序列化的(对于Java中的标准集合类型,这是正确的).

上一篇:java-声纳问题-参数必须为非空但被标记为可为空


下一篇:C#-在Sonar中获得代码覆盖率,但没有测试结果(.Net)