【问题标题】:Fields in a “Serializable” class should either be transient or serializable squid : S1948“可序列化”类中的字段应该是瞬态的或可序列化的 squid:S1948
【发布时间】:2016-12-12 16:44:50
【问题描述】:

当我使用 SonarQube 检查我的 Java 代码时,弹出了一些警告:“Serializable”类中的字段应该是瞬态的或可序列化的 squid:S1948。

我的代码:

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

我只是不确定我还能在这里做什么,Class 是可序列化的,并且所有成员字段也都是可序列化的。

请让我知道之前是否已解决此问题。

【问题讨论】:

  • Object 没有实现Serializable。
  • 如何使对象实现可序列化
  • 你不能。一种方法是简单地将Object 替换为Serializable,但第一个问题应该是您期待什么样的消息。这真的是一个任意对象吗?
  • 谢谢~msg 应该是字符串而不是任意对象。

标签: java sonarqube serializable


【解决方案1】:

此 SonarQube 规则要求可序列化类的所有字段也必须是可序列化的(或标记为 transient,以便在序列化过程中被忽略)。

Object 类没有实现Serializable,所以下面这行违反了这条规则:

private Object msg;

要解决此问题,请将msg 从序列化中排除,将其设为transient,或将类型从Object 更改为String 或任何其他实现Serializable 的类。

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 2012-07-05
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多