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
异常测试现象
- 类名修改测试:将ChildDTO类名重构为
ChildDTOx,警告立即消失;改回原名后警告再次出现。 - 相同结构类测试:新建与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
相关产品推荐
相关产品推荐

