当前位置: 首页 > 面试题库 >

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

路和悌
2023-03-14
问题内容

除了在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中的标准集合类型而言是正确的)。



 类似资料:
  • 我的代码: 我只是不知道我还能在这里做些什么,这个类是可序列化的,并且所有的成员字段也是可序列化的。 请让我知道,如果这已经解决之前。

  • 嗨,我在声纳皮棉中收到此错误: “Serializable”类中的字段应该是暂时的或可序列化的 私有最终条件notEmpty=锁定。newCondition() 我的代码是: 有人能提供解决方案,使sonar不会显示所有三个变量的这些错误吗?

  • 我遇到了下面的问题,请让我知道是否有人以前见过这个,真的让我疯狂地想如何前进。 我有两个实体- 当我在类B上运行SonarQube分析时,我看到S1948弹出,我只是不确定我还能在这里做什么,类A和B是可序列化的,并且确实拥有所有可序列化的成员字段。 请让我知道,如果这已经解决之前。 提前感谢!

  • 考虑以下代码: 现在扩展了一个实现接口的类。类和是带有一堆getter和setter的POJOS。FindBugs抱怨和字段说: 这个Serializable类定义了一个非基元实例字段,它既不是瞬态的、Serializable的,也不java.lang.Object的,并且似乎没有实现Externalizable接口或readObject()和WriteObject()方法。 好吧,所以一切都很好

  • 我有一个没有扩展可串行化或可外部化接口的类,但在netbeans中使用FindBugs时仍然会遇到错误。有人能告诉我如何解决这个问题吗? 这是我的课 FindBug中的Bug:类分析器定义了一个非瞬时的非序列化实例字段objAnalyzerVar,对于objAnalyzerDataTypeInfo也是如此;

  • 如果我有一个可序列化的类, } 当我使用以下消息构建findBugs时,会显示此消息: 这个可序列化类定义了一个非原语实例字段,它既不是瞬态的、可序列化的,也不是java的。并且似乎没有实现可外部化的接口或readObject()和writeObject()方法。如果此字段中存储了不可序列化的对象,则此类的对象将无法正确反序列化。 田野应该是什么才不会看起来像虫子?