java 自动生成get set toString equals hashcode方法利器lombok.jar
原创    love_self    发表于:2018-08-12 13:40:25
  阅读 :83   收藏   编辑

我们在日常的开发、维护过程中,通常会遇到大量的javabean,通过IED自动去生成getter、setter、equals、hashcode、toString等相关方法,一旦修改或新增还要重新设置,这样没有意义、有重复的工作实际上没有太多意义且java文件含有大量冗余的代码,这时我们可以通过lombok相关注解的方式来去解决这些问题

Lombok简介

可以通过注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具类

  • 官方地址:https://projectlombok.org/

  • github地址:https://github.com/rzwitserloot/lombok

eclipse安装

下载lombok.jar 双击 

21

点击 Specify location 选择你安装的eclipse.exe ,点击Install/Update即可

或者

打开eclipse.ini 新增

-javaagent:E:\eclise_oxygen\eclipse\lombok.jar

指定lombok.jar路径即可

重启eclipse生效

Lombok使用

maven pom.xml新增

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
</dependency>

常用注解

@Getter/@Setter

作用在类上或属性上,放在类上,对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法

@Getter
@Setter
public class T implements Serializable{
	
	private String userName;
	private String password;
	
}

等同于

public class T implements Serializable{
	
	private String userName;
	private String password;
	
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

@ToString

作用在类上,生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割

@ToString
public class T implements Serializable{
	
	private String userName;
	private String password;

}

等同于

public class T implements Serializable{
	
	private String userName;
	private String password;
	
	@Override
	public String toString() {
		return "T (userName=" + userName + ", password=" + password + ")";
	}
}

@EqualsAndHashCode

会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可指定具体使用哪些属性

@EqualsAndHashCode
public class T implements Serializable{
	
	private String userName;
	private String password;
	
}

等同于

public class T implements Serializable{
	
	private String userName;
	private String password;
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		T other = (T) obj;
		if (password == null) {
			if (other.password != null)
				return false;
		} else if (!password.equals(other.password))
			return false;
		if (userName == null) {
			if (other.userName != null)
				return false;
		} else if (!userName.equals(other.userName))
			return false;
		return true;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((password == null) ? 0 : password.hashCode());
		result = prime * result + ((userName == null) ? 0 : userName.hashCode());
		return result;
	}
	
}

@NoArgsConstructor @AllArgsConstructor

无参构造器、全参构造器

@RequiredArgsConstructor

部分参数构造器, 该注解会生成一个包含常量(final),和标识了@NotNull的变量 的构造方法

该注解有3个参数可设置

  • onConstructor 

onConstructor=@__({@AnnotationsHere})

比如

@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TService{
	private TDao tDao; 
}

等同于

@Service
public class TService{
 @Autowired
 private TDao tDao; 
}
  • access 构造函数访问修饰符,默认public

  • staticName

如果设置了它,将添加一个静态构造方法名字是设置的字符串的名字,访问修饰符为公有的

@RequiredArgsConstructor(staticName="t")
public class T implements Serializable{
	
	
	private String userName;
	private String password;

	
}

等同于

public class T implements Serializable
{
  private String userName;
  private String password;
  
  public static T t()
  {
    return new T();
  }

@Data

包含

  • @ToString

  • @EqualsAndHashCode

  • @Getter

  • non-final属性的@Setter

  • @RequiredArgsConstructor

更多注解参考 https://projectlombok.org/features/all 

评论
条评论