当前位置: 首页 > 知识库问答 >
问题:

“Serializable”类中的字段应该是瞬态的或可序列化的squid:S1948

何楷
2023-03-14

我的代码:

public class ServiceResult implements Serializable {
    public static final Integer INTERNAL_ERROR = 500;
    public static final Integer SERVICE_EXCEPTION = 501;
    public static final Integer PARAM_ERROR = 999;
    public static final int AUTHORITY_ERROR = 401;
    public static final Integer SUCCESS = 200;
    public static final Integer INPUT_ERROR = 402;

    private Integer code = SUCCESS;
    private Object msg;

    public ServiceResult() {

    }

    public ServiceResult(Integer code, Object msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getMsg() {
        return msg;
    }

    public void setMsg(Object msg) {
        this.msg = msg;
    }

    public static ServiceResult fail(String msg) {
        ServiceResult serviceResult = new ServiceResult();
        serviceResult.setCode(INTERNAL_ERROR);
        serviceResult.setMsg(msg);
        return serviceResult;
    }

    public static ServiceResult success(Object msg) {
        ServiceResult serviceResult = new ServiceResult();
        serviceResult.setCode(SUCCESS);
        serviceResult.setMsg(msg);
        return serviceResult;
    }
}

我只是不知道我还能在这里做些什么,这个类是可序列化的,并且所有的成员字段也是可序列化的。

请让我知道,如果这已经解决之前。

共有1个答案

马琛
2023-03-14

此SonarQube规则要求可序列化类的所有字段也必须是可序列化的(或标记为瞬态,以便在序列化期间忽略它们)。

对象类未实现可序列化,因此以下行违反了该规则:

private Object msg;

要解决此问题,请将消息从序列化中排除,使其成为瞬态的,或者将类型从对象更改为字符串,或者更改为实现可序列化的任何其他类。

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

  • 问题内容: 除了在SonarLint V3(squid:S1948)中遇到此问题之外,我的问题与此问题非常相似。 我的代码是: 摘要对象实现可序列化。 现在,如果我用ArrayList替换List,则SonarLint中会出现另一个警告,提示我们应该使用接口而不是实现类。 我认为这可以在SonarQube中解决,但是对于SonarLint我不知道。这是一个错误还是我做错了什么? 问题答案: Son

  • 我遇到了下面的问题,请让我知道是否有人以前见过这个,真的让我疯狂地想如何前进。 我有两个实体- 当我在类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()方法。如果此字段中存储了不可序列化的对象,则此类的对象将无法正确反序列化。 田野应该是什么才不会看起来像虫子?