`
witcheryne
  • 浏览: 1100338 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Lombok简化java开发 - Getter/Setter注解,让你不用再多getter/setter写方法

 
阅读更多

这个内容在之前的帖子中已经有人讨论过,今天再做一更进一步的了解.

 

本篇会涉及如下三个注解:

 

  • @Getter/@Setter: 帮助我们对应的 getter/setter方法
    • (Come on, 这个没什么意思, Hibernate Tools会生成, Eclipse 佷智能的好不拉! 是的, 从这个角度出发的确没太大吸引力, 各位看管姑且看之,  @Data会更有用, 总是会有需要手写pojo的情况)
  • @NonNull: 在setter方法中做非null判断,遇到null参数,会抛出NullPointerException

 

如果你还不知道Lombok是什么, 先看看这篇:

Lombok简化Java代码 - code less do more

 

关于这部分主题,官方文档在这里(E文强力的朋友也看这里)

http://projectlombok.org/features/GetterSetter.html

 

代码演示:

 

package lv.sample.lombok;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import lombok.ToString;

@ToString
public class GetterSetterUser {
	
	@Getter @Setter private int age = 25;
	
	@Setter(AccessLevel.PROTECTED) private String address = "shanghai";
	
	/*
	 * add a notnull constraint.
	 */
	@Getter @Setter @NonNull
	private String email = null;
	
	/**
	 * if the setName method has been declared,
	 * the Lombok does not generate it.
	 */
	@Setter @Getter
	private Object name = null;
	
	/**
	 * code by myself
	 * @param name
	 */
	public void setName(String name) {
		this.name = name + " from my code";
	}
	
	public static void main(String[] args) {
		// we test the getter/setter annotation
		GetterSetterUser bean = new GetterSetterUser();
		bean.setAge(20);
		bean.setAddress("xi'an");
		bean.setName("wity_lv,");
		
		/* 
		 * the toString() method has been instead of the Lombok @ToString
		 * annotation
		 */
		System.out.println(bean.toString());
		
		/*
		 * set a null value to email
		 */
		try {
			bean.setEmail(null);
		} catch(NullPointerException e) {
			System.out.println("phone could not be null value");
		}
		
	}
}

 

console out 写道
GetterSetterUser(age=20, address=xi'an, email=null, name=wity_lv, from my code)
email could not be null value

 

使用 delombok工具反向生成代码, 看看使用注解能省多少代码:

注意: lombok的注解是可以直接用的, delombok工具只是用来查看生成的代码, 不需要将delombok生成的代码复制回工程

 

delombok 写道
java -jar -cp lib/log4j-1.2.8.jar lib/lombok.jar delombok src -d ./src-delomboked

 

 

// Generated by delombok at Fri Aug 26 10:57:14 CST 2011
package lv.sample.lombok;

import lombok.NonNull;

public class GetterSetterUser {
	
	private int age = 25;
	private String address = "shanghai";
	/*
	 * add a notnull constraint.
	 */
	@NonNull
	private String email = null;
	/**
	 * if the setName method has been declared,
	 * the Lombok does not generate it.
	 */
	private Object name = null;
	/**
	 * code by myself
	 * @param name
	 */
	public void setName(String name) {
		this.name = name + " from my code";
	}
	
	public static void main(String[] args) {
		// we test the getter/setter annotation
		GetterSetterUser bean = new GetterSetterUser();
		bean.setAge(20);
		bean.setAddress("xi\'an");
		bean.setName("wity_lv,");
		/* 
		 * the toString() method has been instead of the Lombok @ToString
		 * annotation
		 */
		System.out.println(bean.toString());
		/*
		 * set a null value to email
		 */
		try {
			bean.setEmail(null);
		} catch (NullPointerException e) {
			System.out.println("phone could not be null value");
		}
	}
	
	@java.lang.Override
	@java.lang.SuppressWarnings("all")
	public java.lang.String toString() {
		return "GetterSetterUser(age=" + this.getAge() + ", address=" + this.address + ", email=" + this.getEmail() + ", name=" + this.getName() + ")";
	}
	
	@java.lang.SuppressWarnings("all")
	public int getAge() {
		return this.age;
	}
	
	@java.lang.SuppressWarnings("all")
	public void setAge(final int age) {
		this.age = age;
	}
	
	@java.lang.SuppressWarnings("all")
	protected void setAddress(final String address) {
		this.address = address;
	}
	
	@NonNull
	@java.lang.SuppressWarnings("all")
	public String getEmail() {
		return this.email;
	}
	
	@java.lang.SuppressWarnings("all")
	public void setEmail(@NonNull final String email) {
		if (email == null) throw new java.lang.NullPointerException("email");
		this.email = email;
	}
	
	@java.lang.SuppressWarnings("all")
	public Object getName() {
		return this.name;
	}
}
 

 

话说,为每个字段写@Getter @Setter有些麻烦, 这里有个@Data会省不少事:

 

 

@Data
@NoArgsConstructor
@AllArgsConstructor
@Log4j
public class LombokUser {
	
	private String id = null;
	private String name = null;
	
	@NonNull
	private String email = null;
	
	public static void main(String[] args) {
		log.info("test the lombok bean");
		
		LombokUser u = new LombokUser("001", "wity_lv", "wity_lv@sample.com");
		log.info(u.toString());
		
		LombokUser u2 = new LombokUser("001", "wity_lv", "wity_lv@sample.com");
		log.info(u.equals(u2));
		
		try {
			u.setEmail(null);
		} catch(NullPointerException ex) {
			log.info("email could not be null: " + ex.getMessage());
		}
	}
}

 

 

console out 写道
2011-08-26 11:10:40 test the lombok bean
2011-08-26 11:10:40 LombokUser(id=001, name=wity_lv, email=wity_lv@sample.com)
2011-08-26 11:10:40 true
2011-08-26 11:10:40 email could not be null: email
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java简便方法引入getter/setter/tostring等方法

    java 的eclipse或idea等 定义变量时 直接引入lombok.jar包 在类外部 引入@AllArgsConstructor @NoArgsConstructor @Data 简便方法引入getter/setter/tostring等方法

    IDEA插件-lombok-plugin-0.28-2019.3.rar

    例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦...

    lombok-plugin-0.23-IC-2017.3.zip

    例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦...

    lombok-plugin-0.28-2018.2.zip

    例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦...

    lombok-plugin--0.32-2019.2.zip

    Lombok是一款非常受欢迎的Java库,它通过注解的方式简化了Java代码的编写,特别是对于getter、setter、构造函数、equals、hashCode以及toString等方法的生成。Lombok Plugin是针对集成开发环境(IDE)的扩展插件,它...

    lombok-pluginDK-0.29-2019.2.zip

    Lombok 是一个 Java 开发工具,它通过注解的方式简化了 Java 类的编写,免去了开发者手动编写 getter、setter、构造器、equals、hashCode 和 toString 方法等繁琐的代码。Lombok 插件则是用于集成 Lombok 功能到开发...

    lombok的jar包.zip

    例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法。 Lombok能通过注解的方式,在编译时自动为...

    lombok-plugin-0.34-2020.1.zip

    Lombok 是一个 Java 开发工具,它通过注解处理器自动为类添加getter、setter、构造器等常用方法,极大地减少了代码冗余,提高了开发效率。Lombok 的插件则是为了在 IDE 中支持 Lombok 功能,使开发者在编写代码时...

    lombok-plugin-0.27-2019.1.zip

    Lombok是一款非常流行的Java开发工具,它通过注解的方式简化了JavaBean的代码编写,极大地提高了开发效率。在本文中,我们将深入探讨Lombok插件及其在IntelliJ IDEA 2019.1版本中的应用。 首先,Lombok插件是针对...

    lombok-plugin-0.34-2021.2.zip

    Lombok 提供的注解如 `@Data`, `@Setter`, `@Getter`, `@NoArgsConstructor`, `@AllArgsConstructor` 等,能够自动生成构造函数、getter 和 setter 方法、equals(), hashCode() 以及 toString() 等常用方法,极大地...

    IDEA中 Getter、Setter 注解不起作用的问题如何解决

    Lombok是一个能帮助开发者消除Java类中大量重复的getter和setter方法的库,通过注解的方式简化代码。当IDEA无法识别这些注解时,会导致代码辅助功能失效,比如无法跳转到相关方法或者生成的代码中缺失这些方法。 这...

    lombok-plugin-0.29-EAP.zip

    Lombok是一款非常受欢迎的Java库,它通过注解的方式简化了Java对象的创建,使得代码更加简洁、易读。Lombok 2020最新版0.29-2020.1-EAP是其在2020年发布的一个EAP(Early Access Program,早期访问版本),用于测试...

    lombok-plugin-0.34.1-2019.1.zip

    Lombok 是一个 Java 开发工具,它通过注解的方式简化了 Java 类的编写,使得代码更加简洁、易读。Lombok 提供了一系列的注解,如 `@Data`、`@AllArgsConstructor`、`@NoArgsConstructor`、`@Setter`、`@Getter` 等,...

    lombok-plugin-0.34.1-2018.3.zip

    Lombok 是一个 Java 开发工具,它通过注解的方式简化了 Java 类的编写,极大地减少了样板代码。在 Spring Boot 项目中,Lombok 的使用能够提高开发效率,使得代码更加简洁、易读。`lombok-plugin-0.34.1-2018.3.zip`...

    lombok2018.1-2019.3.zip

    总结一下,Lombok是一个强大的Java开发工具,通过注解简化了JavaBean的编写,提高了开发效率。这个压缩包提供了2018.1到2019.3版本的Lombok插件,方便开发者在IDE中集成使用,享受更高效的编码体验。

    lombok-plugin-0.34-2020.2.zip

    Lombok 是一个 Java 开发工具,它通过注解处理器自动为类添加getter、setter、构造器等常用方法,极大地减少了代码量,提升了开发效率。Lombok 的插件 "lombok-plugin-0.34-2020.2.zip" 是针对特定版本的 IntelliJ ...

    lombok-plugin-0.30-2020.1.zip

    在软件开发过程中,Java开发者经常面临一个问题,那就是为类的属性编写getter和setter方法,这既耗时又增加了代码冗余。为了解决这一问题,Lombok项目应运而生。Lombok是一款强大的代码生成库,它允许我们在编译时...

    lombok-plugin-0.34.1-2018.1.zip

    Lombok 是一个 Java 开发工具库,它通过提供一系列注解来简化代码,尤其是在创建简单数据类时,能够极大地减少样板代码。Lombok 插件是针对集成开发环境(IDE)如 IntelliJ IDEA 的扩展,目的是在编写和编辑 Java ...

    IDEA插件-lombok-plugin-0.14.14

    Lombok是一个强大的Java库,它通过注解的方式,自动处理Java对象的构造器、getter/setter、equals()、hashCode()以及toString()等常用方法,从而减少了大量冗余的样板代码。例如,使用`@Data`注解就能自动生成所有...

    lombok-1.16.16源码和文档

      可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。 @EqualsAndHashCode  ...

Global site tag (gtag.js) - Google Analytics