android java 引入了 lombok 使用 getter setter 注解无效?

作者站长头像
站长
· 阅读数 6

使用的 IntelliJ IDEA 2022.3.1 (Ultimate Edition IDE,android 项目中在build.gradle 引入了 lombok 插件用于自动生成 getter/setter

// https://mvnrepository.com/artifact/org.projectlombok/lombok
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.28'

idelombok 插件插件已经启用。

android java 引入了 lombok 使用 getter setter 注解无效?

android java 引入了 lombok 使用 getter setter 注解无效?

以下两种用法都不生效:

第一种

@Getter
@Setter
public class IndexUserApiRequestDTO {
    private String gender;
    private String size;
    private String page;
    private String sortColumn;
    private String sortType;
}

第二种

public class User {
    
    @Accessors(chain = true)
    public staic class UserArchive {
        @Getter @Setter
        private String userId;
        @Getter @Setter
        private String gender;
    }

}

执行构建的时候各种提示: cound find accessor ... 就是提示没有找到对应的 getter/setter。这是为什么?

回复
1个回答
avatar
test
2024-06-28

如果在 Android 项目中使用 Lombok,你需要进行一些额外的配置才能使 Lombok 注解生效。

首先,请确保你在 build.gradle 文件中正确使用了 Lombok 插件。你已经在你的 build.gradle 文件中添加了以下配置:

compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.28'

但是这样只是将 Lombok 注解添加到编译路径中,并不会自动应用它们。

在 IntelliJ IDEA 中,你需要进行如下配置:

  1. 确保你安装了 Lombok 插件。你提到你已经安装了 Lombok 插件,在你的屏幕截图中也可以看到该插件已启用。
  2. 在 IntelliJ IDEA 的设置中启用 Lombok 注解处理器:

    • 打开 IntelliJ IDEA 设置。
    • 在左侧导航栏中,选择 "Build, Execution, Deployment" > "Compiler" > "Annotation Processors"。
    • 勾选 "Enable annotation processing" 选项。
    • 在 "Annotation Processors" 选项卡中,确保 "Enable annotation processing" 处于选中状态。
    • 在 "Generated sources directories" 选项卡中,添加 project/module/build/generated/source/apt 目录。

在完成上述配置后,重新构建你的项目,Lombok 的注解应该可以起作用了。

补充:如果你觉得 lombok 的配置复杂,还有一些其他的 Android 库可以用来自动生成 getter 和 setter 方法,例如:

  1. Butter Knife:Butter Knife 是一个非常流行的 Android View 注入库,它可以自动生成包括 getter 和 setter 方法在内的很多常用代码。你可以使用注解 @BindView 来自动绑定视图,并且 Butter Knife 会为你生成相应的 getter 和 setter 方法。

    public class MainActivity extends AppCompatActivity {
        @BindView(R.id.textView)
        TextView textView;
    
        // ...
    
        private void init() {
            // 使用 ButterKnife 绑定视图
            ButterKnife.bind(this);
    
            // ...
        }
    
        // 自动生成的 getter 和 setter 方法
        public TextView getTextView() {
            return textView;
        }
    
        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }
  2. Android Data Binding:Android Data Binding 是 Android 官方提供的一个库,它可以将布局文件中的视图和数据绑定起来,并且自动生成 getter 和 setter 方法。你可以使用 <data> 标签在布局文件中定义绑定的变量,并在 Java 代码中直接访问相应的 getter 和 setter 方法。

    <layout xmlns:android="http://schemas.android.com/apk/res/android">
        <data>
            <variable
                name="user"
                type="com.example.User" />
        </data>
    
        <!-- ... -->
    
        <TextView
            android:id="@+id/textView"
            android:text="@{user.name}" />
    </layout>
    public class MainActivity extends AppCompatActivity {
        private User user;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
            user = new User("John");
            binding.setUser(user);
        }
    
        // 自动生成的 getter 和 setter 方法
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }

这些库都可以帮助你简化生成 getter 和 setter 方法的过程,选择适合你项目需求的库并根据文档进行配置和使用。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容