Project Lombok – Sehr interessant!
Wem sein “getter/setter”-Boilerplatecode in seinen Domainenobjekten auf die Nerven geht, sollte sich mal das Project Lombok ansehen!
Nachdem man die Bibliothek eingebunden hat, werden mit @Annotations an den Objekten im Hintergrund die getter/setter sowie hashcode, toString und equals generiert. Das Schöne daran ist auch, das die Klasse leer bleibt, jedoch der Outline-View in Eclipse alle Methoden anzeigt.
Als Beispiel hier mal mein Domänenobjekt ohne Lombok (100 Zeilen):
package de.test.domain;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.Hibernate;
public class User implements java.io.Serializable
{
private Integer id;
private String name;
private String surname;
private String username;
private String password;
private Boolean active;
private String email;
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return this.surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public Boolean getActive() {
return this.active;
}
public void setActive(Boolean active) {
this.active = active;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
@Override
public int hashCode()
{
return new HashCodeBuilder(17,37).append(this.getUsername()).toHashCode();
}
@Override
public boolean equals(Object other)
{
if(this == other)
return true;
if (other == null || Hibernate.getClass(this) != Hibernate.getClass(other))
return false;
final User rhs = (User) other;
return new EqualsBuilder().append(this.getUsername(),rhs.getUsername()).isEquals();
}
@Override
public String toString()
{
return "User [active=" + active + ", name=" + name + ", email=" + email + ", password="
+ password + ", surname=" + surname + ", username=" + username
+ "]";
}
}
..und hier mein Domänenobjekt mit Lombok (21 Zeilen):
package de.test.domain;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@EqualsAndHashCode(exclude={"id","name","surname","password","active","email"})
@ToString(exclude="id")
public class User implements java.io.Serializable
{
private @Getter @Setter Integer id;
private @Getter @Setter String name;
private @Getter @Setter String surname;
private @Getter @Setter String username;
private @Getter @Setter String password;
private @Getter @Setter Boolean active;
private @Getter @Setter String email;
}
Hier das Objekt in Eclipse:
Man könnte jetzt in der Lombokmagie ein Problem sehen, allerdings sehe ich eher das Problem darin, das wir langsam von der XML-Hell geradewegs in die @Annotation-Hell kommen…
