Setter注释在Java类中不起作用

Setter注释在Java类中不起作用,java,lombok,Java,Lombok,我的工作区结构如下: package1 Class A package 2 Class B 类A中添加了所有注释: @Getter @Setter @Value @Data @ToString @Builder class A { int a, int b } 但当我试图在类B中使用A.setA1时,我得到一个错误,即setA不是一个定义的函数 我已在配置中包含以下依赖项: LombokUtils = 1.1; Lombok = 1.16.x; 不确

我的工作区结构如下:

 package1
     Class A
 package 2
    Class B
类A中添加了所有注释:

@Getter
@Setter
@Value
@Data
@ToString
@Builder
class A {
    int a,
    int b
}
但当我试图在类B中使用A.setA1时,我得到一个错误,即setA不是一个定义的函数

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

LombokUtils = 1.1;
Lombok = 1.16.x; 

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

不起作用,因为在类A中,您需要 进口龙目吸气剂;进口龙目布、塞特布; 现在在B类中,您应该能够访问setter。
你可以得到更多的信息

不起作用,因为在A班你需要 进口龙目吸气剂;进口龙目布、塞特布; 现在在B类中,您应该能够访问setter。
您可以获得更多信息

帮助创建不可变类的@Value和添加改变类状态的方法的@Setter之间存在冲突


删除@Value注释,类A中应该有Setter。

帮助创建不可变类的@Value和添加改变类状态的方法的@Setter之间存在冲突


删除@Value注释,您应该在类A中设置setter。

将类A的可见性更改为public,然后重试

将类A的可见性更改为public,然后重试

@吸气剂

这就告诉龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙。但是,@Data也会这样做,@Value也会这样做。这个注释没有意义;移除它

@塞特

这告诉lombok为所有非决赛场地制作二传手:你们的场地是决赛场地,所以不制作二传手。但是,@Data也能做到这一点——它还意味着:为每个非最终字段创建一个setter。这个注释没有意义;移除它

@价值观

这告诉lombok将类设置为final,将所有字段设置为final,将所有字段设置为私有,将构造函数设置为设置所有字段,将toString设置为getter,并将hashcode和equals方法设置为私有

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

@资料

不应同时使用数据和值对类进行注释:它们是对立的。如果您希望这些字段是可设置的,那么您要查找的是@Data,而不是@Value。删除其中一个

@托斯特林

数据和值都已经做到了这一点;这个注释没有意义;移除它

@建筑商

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

我很确定你想要:

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

@吸气剂

这就告诉龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙。但是,@Data也会这样做,@Value也会这样做。这个注释没有意义;移除它

@塞特

这告诉lombok为所有非决赛场地制作二传手:你们的场地是决赛场地,所以不制作二传手。但是,@Data也能做到这一点——它还意味着:为每个非最终字段创建一个setter。这个注释没有意义;移除它

@价值观

这告诉lombok将类设置为final,将所有字段设置为final,将所有字段设置为私有,将构造函数设置为设置所有字段,将toString设置为getter,并将hashcode和equals方法设置为私有

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

@资料

不应同时使用数据和值对类进行注释:它们是对立的。如果您希望这些字段是可设置的,那么您要查找的是@Data,而不是@Value。删除其中一个

@托斯特林

数据和值都已经做到了这一点;这个注释没有意义;移除它

@建筑商

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

我很确定你想要:

@Data @Builder class Foo {
}

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

基于lombok的引用:

@Value是@Data的不可变变量;所有字段都是私有的 默认情况下为final,不生成和setter

@Value创建不可变的类,而@Setter通过添加Setter使类可变

因此,为了让setter删除@Value

在不使用@Value的情况下检查此项:

package com.samples.demo.pacakge1;

import lombok.*;

@Data
@Getter
@Setter
@Builder
//@Value
@ToString
public class A {
    int x;
    int y;
}
B类:

package com.samples.demo.package2;

import com.samples.demo.pacakge1.A;

public class B {
    public static void main(String[] args) {
        A a = A.builder().build(); //can't use A a=new A();
        a.setY(12);
        System.out.println(a.getY());

    }
}

根据lombok的参考:

@Value是@Data的不可变变量;所有字段都是私有的 默认情况下为final,不生成和setter

@Value创建不可变的类,而@Setter通过添加Setter使类可变

因此,为了让setter删除@Value

在不使用@Value的情况下检查此项:

package com.samples.demo.pacakge1;

import lombok.*;

@Data
@Getter
@Setter
@Builder
//@Value
@ToString
public class A {
    int x;
    int y;
}
B类:

package com.samples.demo.package2;

import com.samples.demo.pacakge1.A;

public class B {
    public static void main(String[] args) {
        A a = A.builder().build(); //can't use A a=new A();
        a.setY(12);
        System.out.println(a.getY());

    }
}
A是一个类,并且这些方法是非静态的,您应该使用A.setA来代替。顺便说一句:@Data已经包含@Getter&@Setter,所以您可以删除@Gett
请始终在post中向代码中添加导入。这有助于其他开发人员了解您所指的依赖项要完成@Youans所说的内容,请查看。使用“@Value”:默认情况下,所有字段都是私有的和最终的,并且不会生成setter。A是一个类,这些方法是非静态的,你应该改用.setA,顺便说一句:@Data已经包含@Getter&@Setter,所以你可以删除@Getter&@Setter,它仍然可以工作。请始终在post中向代码中添加导入。这有助于其他开发人员理解你所指的依赖项要完成@Youans所说的内容,请查看。使用“@Value”:默认情况下,所有字段都是私有的和最终的,并且不会生成setter。非常感谢!!!我不知道,非常感谢!!!我不知道这件事