首页 > 解决方案 > Setter 注释在 Java 类中不起作用

问题描述

我的工作区结构如下:

 package1
     Class A
 package 2
    Class B

A 类添加了所有注释:

@Getter
@Setter
@Value
@Data
@ToString
@Builder
class A {
    int a,
    int b
}

但是,当我尝试A.setA(1)在 BI 类中使用时,会出现 setA 不是定义的函数的错误。

我在配置中包含了以下依赖项:

LombokUtils = 1.1;
Lombok = 1.16.x; 

不知道这里出了什么问题。@Setter注释不起作用。

标签: javalombok

解决方案


@Getter

这告诉 lombok 制造吸气剂。但是,@Data也这样做,@Value也这样做。这个注释没有意义;去掉它。

@Setter

这告诉 lombok为所有非最终字段创建设置器(剧透:您的字段在这里是最终的,所以没有设置器)。但是,@Data也这样做 - 这也意味着:为每个非最终字段创建一个 setter。这个注释没有意义;去掉它。

@Value

这告诉 lombok 使类成为 final,使所有字段成为 final,使所有字段成为私有,创建一个设置所有字段的构造函数,创建一个 toString,创建 getter,并创建 hashcode 和 equals 方法。

因为它使所有字段成为最终字段,所以@Setter什么都不做。

@Data

你不应该用 Data 和 Value 来注释一个类:它们是相反的。如果您打算将这些字段设置为可设置,那么您正在寻找@Data,而不是@Value. 删除其中之一。

@ToString

Data 和 Value 都已经这样做了;这个注释没有意义;去掉它。

@Builder

这不是其他任何东西所暗示的,所以请保留它。

我很确定你想要:

@Data @Builder class Foo {
}

没有别的了。实际上,你有构建器,所以你可能想要一个不可变的类(所以,根本没有设置器 - 你构造了一个实例,然后它就不可更改),在这种情况下,你正在寻找@Value @Builder class Foo {}.


推荐阅读