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

PMD错误:在Lombok Builder中重写某些方法时,Accessormethod生成

苏波涛
2023-03-14

我有一个应该用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字段的生成器和FooBuilder构造函数将由Lombok生成。

这会导致PMD抛出错误:

规则:AccessorMethodGeneration优先级:3避免自动生成的方法访问私有字段和内部/外部类的方法。

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

共有1个答案

楚博雅
2023-03-14

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

如果您没有开发旧的Android应用程序,那么您可能可以从规则集中完全删除这些规则。例如,现在有了多索引,可以在你的应用程序中使用超过64k的方法。

此外,自Java11以来,java编译器不再生成这些访问器类和方法,请参阅JEP 181:基于嵌套的访问控制。

 类似资料:
  • 有一个带有一些功能的接口。基类实现接口。然后在子类中重写函数。 但是@override给出了编译器错误“方法不从其超类重写方法” 问题:在子类中,如何覆盖基类中实现的接口函数? }

  • 我想在SpringMVC的登录和注销页面中使用不同的用户名和角色。 我已从以下链接学习,我正在使用spring 4.2.5: http://www.raistudies.com/spring-security-tutorial/role-based-spring-jsp-taglibs/ 但是我的一个班级显示了一个错误: Eclipse显示方法上的编译时错误, AjaxAuthentication

  • 我试图覆盖add(),但它不会编译 错误消息 java:36:错误:名称冲突:AVLTree中的add(E#1)和BinaryTree中的add(E#2)具有相同的擦除,但两者都不重写另一个公共void add(E toInsert)^,其中E#1、E#2是类型变量:E#1扩展了在类AVLTree中声明的Comparable E#2扩展了在类BinaryTree中声明的Comparable

  • 所有com.android.support库必须使用完全相同的版本规范(混合版本会导致运行时崩溃)。找到版本27.0.2、26.1.0.示例包括com.android.support:support-compat:27.0.2和com.android.support:animated-vector-drawable:26.1。 应用插件:“com.android.application” 当我运行

  • 有人能详细解释一下这条规则吗。规则:AccessorMethodGeneration优先级:3避免自动生成的方法访问私有字段和内部/外部类的方法,并提供字段和方法的具体示例?

  • 家长: 儿童: