最近做项目使用lombok生成getter和setter,代码如下:
以下代码为示例代码:
import lombok.Setter;
import lombok.Getter;
@Getter
@Setter
public class Member {
private String name;
private long id;
private int age;
private boolean isLeader;
@Override
public String toString() { //方便打印结果
return "Member [name=" + name + ", id=" + id + ", age=" + age
+ ", isLeader=" + isLeader + "]";
}
}
使用jackson,测试代码如下:
import org.codehaus.jackson.map.ObjectMapper;
public class JsonTest {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Member m = mapper.readValue("{\"name\":\"jack\",\"id\":234902348,\"age\":25,\"isLeader\":false}", mapper.constructType(Member.class));
System.out.println(m);
}
}
结果将json数据转换成这个对象时出现问题,错误信息如下:
Exception in thread "main" org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "isLeader" (Class Member), not marked as ignorable
提示说isLeader这个property没有找到,但是明明是存在的。这时想到转换对象时,是通过setter将值set给每一个property的,会不会是因为setter不对导致找到property呢?查看一下生成setter,果然发现问题,如下图:
property的名称是isLeader,根据规则,生成的setter应该是setIsLeader(),但是实际却是setLeader(),问题应该就出在这里了,那么修改下Member的代码,来验证下我们的猜测,如下:
import lombok.Setter;
import lombok.Getter;
@Getter
@Setter
public class Member {
private String name;
private long id;
private int age;
private boolean isLeader;
public void setIsLeader(boolean isLeader) { //补充一个setter
this.isLeader = isLeader;
}
@Override
public String toString() {
return "Member [name=" + name + ", id=" + id + ", age=" + age
+ ", isLeader=" + isLeader + "]";
}
}
重新运行测试,问题不再出现,和猜测一样,是由于生成setter不规范导致的。
既然setter生成的不规范,那么getter是不是也是呢?如下图:
果然getter也是一样,并不是getIsLeader(),而是isLeader()。
最后,我们看看eclipse自动生成的getter和setter是什么样呢?
public class Member {
private String name;
private long id;
private int age;
private boolean isLeader;
public boolean isLeader() {
return isLeader;
}
public void setLeader(boolean isLeader) {
this.isLeader = isLeader;
}
@Override
public String toString() {
return "Member [name=" + name + ", id=" + id + ", age=" + age
+ ", isLeader=" + isLeader + "]";
}
}
可见eclipse生成的getter、setter和lombok是一样的,但是eclipse生成的代码是显示的,可以看见,而lombok生成就不容易发现了。
最后说一下boolean型生成getter和setter的问题,如果boolean型property的名称是hello,b生成getter和setter的格式是isHello()和getHello(),如果名称是isHello,生成的还是isHello()和getHello(),这个是sun的规范,但是目前很多框架在使用getter和setter时并不是这样的,而是setHello ()或者setIsHello(),所以编码时一定要小心。
- 大小: 10.7 KB
- 大小: 14.9 KB
分享到:
相关推荐
//使用Lombok帮助我们生成这些内容 getter setter 全参构造无参构造equals hashcode //Lombok 使用步骤 // 1 检查idea是否已经安装 Lombok // 2 检查是否勾选了 enable annotation processer // 3 导入 Lombok依赖 /...
然而,有时在使用Lombok库进行开发时,可能会遇到IDEA中的Getter和Setter注解不起作用的问题。Lombok是一个能帮助开发者消除Java类中大量重复的getter和setter方法的库,通过注解的方式简化代码。当IDEA无法识别这些...
lombok项目的产生就是为了省去我们手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter方法。即它最终能够达到的效果是:在源码中没有getter和setter方法,但是在编译生成的...
使用 Lombok 库,开发者可以使用 @Data 注解来标注 JavaBean,如此 IntelliJ IDEA 将自动生成 getter 和 setter 方法。 如何使用 Lombok 库 要使用 Lombok 库,开发者需要在 pom.xml 文件中添加依赖项: ``` ...
Lombok是一款非常受欢迎的Java开发工具,它通过注解的方式帮助开发者自动生成常见的getter、setter、构造函数等样板代码,从而极大地提高了开发效率并减少了代码的冗余。标题中的“lombok插件”指的是用于集成Lombok...
此外,一些插件如`Lombok`能完全自动化getter和setter的生成,甚至包括构造函数、equals()、hashCode()等方法,且支持自定义注释。 7. **代码规范与团队协作** 当团队协作时,确保所有成员对代码模板达成一致,...
小辣椒插件Lombok是一款广泛应用于Java开发领域的工具,它极大地简化了代码的编写,特别是对于getter、setter、equals、hashCode、toString等繁琐的样板代码。Lombok通过注解处理器在编译时自动插入这些方法,使得源...
Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。...
除了getter和setter,Lombok还提供了其他有用的注解,如`@NoArgsConstructor`、`@AllArgsConstructor`用于生成无参构造函数和全参构造函数,`@EqualsAndHashCode`用于自动生成满足equals()和hashCode()合同的方法,...
可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。 @EqualsAndHashCode ...
LomBok主要特性有:自动生成默认的getter/setter方法、自动化的资源管理(通过@Cleanup注解)及注解驱动的异常处理等。目前在国外广泛应用。 LomBok它和jquery一样,目标是让程序员写更少的代码,以及改进一些原始语法...
Lombok是一款非常受欢迎的Java库,它通过注解的方式简化了Java对象的创建,自动为我们生成getter、setter、构造函数等常见方法,极大地减少了代码的冗余。在本压缩包中,"lombok-plugin"是为IntelliJ IDEA提供的一个...
Lombok的1.16.20版本是它的一个历史版本,提供了许多便利的功能,使得开发者不必手动编写大量的getter、setter、构造函数以及equals()、hashCode()和toString()等常规方法。 Lombok的核心在于它的注解,这些注解...
Lombok提供了一系列的注解,如`@Data`、`@Setter`、`@Getter`、`@NoArgsConstructor`、`@AllArgsConstructor`等,这些注解能够自动生成对应的JavaBeans方法,避免手动编写这些样板代码。例如,`@Data`注解可以自动...
Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。...
当Lombok生成getter和setter时,它会检查这个注解,并在setter方法中添加对null值的检查。 4. `@Setter` 和 `@Getter`:这些注解允许你独立控制每个字段的getter和setter生成。如果你只想为特定字段生成getter或...
当在类上使用`@Data`注解时,Lombok会自动生成所有字段的getter和setter,同时还会提供一个默认的构造函数,以及实现equals()、hashCode()和toString()方法。这样,开发者可以专注于核心业务逻辑,而不是繁琐的基础...
Lombok提供了一种注解方式,通过在实体类上添加`@Data`注解,可以自动为所有字段生成getter和setter,甚至构造函数、equals()、hashCode()等方法,极大地减少了代码量。 接着,我们来看“实体类生成标签(lombok,...
1. `@Data`:这是Lombok最常用的注解之一,它会自动生成类的所有非静态字段的getter和setter,同时还会生成一个全参数的构造函数。 2. `@AllArgsConstructor`:此注解会为类生成一个包含所有字段的构造函数,而`@...
1. `@Data`:这是一个复合注解,包含了`@Getter`、`@Setter`、`@ToString`、`@EqualsAndHashCode`等,可以为类的所有非静态、非transient字段自动生成getter和setter方法,并提供toString()和equals()及hashCode()...