You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ中SonarLint的Serializable警告异常问题求助

SonarLint Serializable警告异常问题

在IntelliJ IDEA 2024.1.1(旗舰版)中使用SonarLint插件时,遇到了Make "[field name]" transient or serializable警告的异常问题:按要求修正代码后警告仍不消失,且存在明显的误判/漏判情况。

初始代码与警告触发

ParentDTO类(已实现Serializable)

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "Description")
public class ParentDTO implements Serializable {
    @NotNull
    @Schema(description = "Test", requiredMode = Schema.RequiredMode.REQUIRED)
    private String test;

    @NotNull
    @Schema(description = "Child", requiredMode = Schema.RequiredMode.REQUIRED)
    private ChildDTO child;
}

ChildDTO类(未实现Serializable)

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "Child description")
public class ChildDTO {
    @NotNull
    @Schema(description = "Name", requiredMode = Schema.RequiredMode.REQUIRED)
    private String name;
}

此时ParentDTO类的child字段触发SonarLint警告:Make "child" transient or serializable。

修正后警告未消失

将ChildDTO修改为实现Serializable接口后:

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "Child description")
public class ChildDTO implements Serializable {
    @NotNull
    @Schema(description = "Name", requiredMode = Schema.RequiredMode.REQUIRED)
    private String name;
}

但警告并未消失,尝试以下操作均无效:

  • 重启IntelliJ并清除所有缓存
  • 将SonarLint插件更新至最新版本
  • 在全新Git克隆的项目上重新配置IntelliJ

异常测试现象

  1. 类名修改测试:将ChildDTO类名重构为ChildDTOx,警告立即消失;改回原名后警告再次出现。
  2. 相同结构类测试:新建与ChildDTO结构完全一致的ChildDTODummy类,在ParentDTO中添加引用:
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "Description")
public class ParentDTO implements Serializable {
    @NotNull
    @Schema(description = "Test", requiredMode = Schema.RequiredMode.REQUIRED)
    private String test;

    @NotNull
    @Schema(description = "Child", requiredMode = Schema.RequiredMode.REQUIRED)
    private ChildDTO child;

    @NotNull
    @Schema(description = "Child dummy", requiredMode = Schema.RequiredMode.REQUIRED)
    private ChildDTODummy childDummy;
}

无论ChildDTODummy是否实现Serializable,都未触发Make "childDummy" transient or serializable警告。

疑问

为什么SonarLint会出现这种异常:在代码符合要求的情况下仍显示警告,而在代码不符合要求的情况下却不触发警告?

内容的提问来源于stack exchange,提问作者dzk008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:52:43