Project Lombok – Sehr interessant!
Gepostet in Java
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…