2010-03-29 16 views
8

Wierzę, że czytam gdzieś ludzi generujących metody equals/hashcode/toString podczas kompilacji (przy użyciu APT) poprzez określenie, które pola powinny być częścią testu hash/równości. Nie mogłem znaleźć nic takiego w internecie (mógłbym to przyśniło?) ...Generowanie equals/hashcode/toString za pomocą adnotacji

To może być zrobione tak:

public class Person { 
    @Id @GeneratedValue private Integer id; 

    @Identity private String firstName, lastName; 
    @Identity private Date dateOfBirth; 

    //... 
} 

Dla podmiotu (tak chcemy exlude niektóre pola, takie jak id).

Albo jak klasa przypadku scala tj obiektu wartość:

@ValueObject 
public class Color { 
    private int red, green, blue; 
} 

Nie tylko plik staje się bardziej czytelne i łatwiejsze do napisania, ale również pomaga zapewnić, że wszystkie atrybuty są częścią równe/hashcode (w przypadku późniejszego dodania innego atrybutu bez aktualizacji metod).

Słyszałem, że program APT nie jest dobrze obsługiwany w środowisku IDE, ale nie uważam tego za poważny problem. W końcu testy są prowadzone głównie przez ciągłe serwery integracyjne.

Każdy pomysł, jeśli już to zrobiono, a jeśli nie, dlaczego? Dzięki

Odpowiedz

2

Podczas gdy Pojomatic nie manipuluje kodowaniem w czasie kompilacji, wspiera łatwe tworzenie metod równości, hashCode i toString, za pomocą adnotacji w celu dostosowania ich zachowania.

+1

Ciekawe podejście. Ciekawe, jaki wpływ ma wydajność. –