lombok插件与boolean不得不说的秘密
lombok插件与boolean不得不说的秘密_lombok boolean_HowYouth的博客-CSDN博客
问题描述
最近在做项目的时候,为了在前台动态渲染多选框组件CheckBox,后台在返回对象时,会自带一个defaultChecked
属性,用以判断是否默认勾选。但是再做其他业务逻辑时,需要对其进行判断,然后就发现defaultChecked
没有getter
方法。实体类中使用了lombok插件。
解决方法
lombok插件会将boolean类型的数据的get方法自动改写为 isXXX,笔者经过测试,的确找到了我的isDefaultChecked()方法。因此,可以通过调用这个方法来获取属性值。
如果使用了boolean的封装类Boolean来定义属性,那就会看到正常情况下的setter&getter。
综上,处理方法有二:
- 使用isXXX方法
import lombok.Data;
@Data
public class TestBean{
private boolean defaultChecked;
}
//------------------------------------------------
//---- 为了便于阅读,实体类和引用不再分开写 ------------
//------------------------------------------------
public class BusinessImpl{
public void testMethod(TestBean bean){
//boolean defaultChecked = bean.getDefaultChecked(); //会提示没有getDefaultChecked这个方法
boolean defaultChecked = bean.isDefaultChecked();
}
}
- 修改为Booelan。
import lombok.Data;
@Data
public class TestBean{
private Boolean defaultChecked;
}
//------------------------------------------------
//---- 为了便于阅读,实体类和引用不再分开写 ------------
//------------------------------------------------
public class BusinessImpl{
public void testMethod(TestBean bean){
boolean defaultChecked = bean.getDefaultChecked();
}
}
Lombok @Data boolean类型 is开头字段没有get set方法研究及处理_lombok is开头_Haocaibo的博客-CSDN博客
问题背景
类字段is开头,发现使用@data注解,并没有get(),set()方法
资料查询
https://www.baeldung.com/lombok-getter-boolean
Lombok 将使用其注解处理器在类中生成一个 isRunning() 方法。
对于以is 开头的布尔字段,后面紧跟标题大小写字母,没有任何前缀来生成 getter 名称。
译文(https://projectlombok.org/features/GetterSetter.html)
您可以使用 @Getter 和/或 @Setter 注释任何字段,让 lombok 自动生成默认的 getter/setter。
默认的 getter 只返回该字段,如果该字段被称为 foo(或者如果该字段的类型是布尔值,则被命名为 isFoo)。如果字段名为 foo,则默认设置器名为 setFoo,返回 void,并采用与该字段相同类型的 1 个参数。它只是将字段设置为此值。
除非您明确指定 AccessLevel,否则生成的 getter/setter 方法将是公共的,如下例所示。合法访问级别为 PUBLIC、PROTECTED、PACKAGE 和 PRIVATE。
您还可以在类上添加 @Getter 和/或 @Setter 注释。在这种情况下,就好像您使用注释对该类中的所有非静态字段进行了注释。
您始终可以使用特殊的 AccessLevel.NONE 访问级别为任何字段手动禁用 getter/setter 生成。这使您可以覆盖类上 @Getter、@Setter 或 @Data 注释的行为。
要将注释放在生成的方法上,可以使用 onMethod=@__({@AnnotationsHere});要将注释放在生成的 setter 方法的唯一参数上,您可以使用 onParam=@__({@AnnotationsHere})。不过要小心!这是一个实验性功能。有关更多详细信息,请参阅 onX 功能的文档。
lombok v1.12.0 中的新功能:字段上的 javadoc 现在将被复制到生成的 getter 和 setter。通常,所有文本都被复制,@return 被移动到 getter,而 @param 行被移动到 setter。移动的意思是:从字段的 javadoc 中删除。也可以为每个 getter/setter 定义唯一的文本。为此,您需要创建一个名为 GETTER 和/或 SETTER 的“部分”。节是 javadoc 中包含 2 个或更多破折号的一行,然后是文本 'GETTER' 或 'SETTER',后跟 2 个或更多破折号,该行没有其他任何内容。如果您使用部分,则不再执行该部分的 @return 和 @param 剥离(将 @return 或 @param 行移到该部分中)。
临时处理
去掉字段is开头
暂时测试发现没有问题
lombok @Data boolean处理 - 简书 (jianshu.com)
对于一般的类型,@Data生成getter和setter加上get和set,对于boolean变量,在获取时使用is开头,设置时使用set,如果变量名中带有is,则与没有相同,比如
boolean open
boolean isOpen
同样生成isOpen()和setOpen。
需要注意的是如果类型为Boolean,仍然会使用get和set。
在生成DTO时,boolean isOpen,需要转换为boolean open进行传输。