PMD 错误:在 Lombok Builder 中覆盖某些方法时的 AccessorMethodGeneration

Posted

技术标签:

【中文标题】PMD 错误:在 Lombok Builder 中覆盖某些方法时的 AccessorMethodGeneration【英文标题】:PMD error: AccessorMethodGeneration when overriding some method in Lombok Builder 【发布时间】:2022-01-07 13:29:06 【问题描述】:

我有以下应该用 Lombok @Builder 构建的类:

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder(toBuilder = true)
public class Foo 
    private String myName;
    private int myAge;
    
    public static class FooBuilder 

        // I'm overriding this method to add some validation logic
        public FooBuilder myName(String myName) 
            // some simple logic to validate "myName"

            this.myName= myName;
            return this;
        
    

我想在设置之前添加一些简单的逻辑来验证myName 字段。但我不想为myAge 这样做。所以myAge 字段的构造器和FooBuilder 构造器将由Lombok 生成。

这会使 PMD 抛出错误:

Rule:AccessorMethodGeneration Priority:3 避免自动生成的方法 访问内部/外部类的私有字段和方法。

我应该抑制这个错误还是有更好的方法来实现我想要的?

【问题讨论】:

【参考方案1】:

规则 AccessorClassGeneration 和 AccessorMethodGeneration 是为了帮助 android (!) 开发而创建的,当时 DEX 格式存在限制。这些生成的类/方法计入当时可能的类/方法总数 (64k)。

如果您不是在开发旧的 Android 应用程序,那么您可能可以将这些规则从您的规则集中完全删除。例如。今天有 Multidex 可能允许在您的应用程序中使用超过 64k 的方法。

另外,从 Java 11 开始,java 编译器不再生成这些访问器类和方法,请参阅 JEP 181: Nest-Based Access Control。

【讨论】:

以上是关于PMD 错误:在 Lombok Builder 中覆盖某些方法时的 AccessorMethodGeneration的主要内容,如果未能解决你的问题,请参考以下文章

lombok中的@Builder.Default注解

@Builder lombok注解

Lombok @builder 在扩展另一个类的类上

还在手写 Builder 模式?试试 Lombok 中的 @Builder 用法,太强了!

如何从 Lombok builder 中排除财产?

Lombok中的@Builder注解的使用