2013-05-29 5 views
6

mogę użyć deseniu sporo:Java konstruktorzy wzór

class Blah 
    int a; 
    double b; 
    String c; 
    Date d; 

    public Blah(int a, double b, String c, Date d) { 
     super(); // possibly 
     this.a = a; 
     this.b = b; 
     this.c = c; 
     this.d = d; 
    } 

To jest rzeczywiście dużo boilerplate czegoś tak prostego. Myślałem o ogólnej fabryce obiektów, aby to zrobić z introspekcją, ale to wydaje się bardzo złe (szczególne przypadki, dziedziczenie i problemy z szybkością). Można użyć guice, a konstruktor całkowicie pomija, ale wtedy ręczne tworzenie obiektów będzie brzydkie.

Czy jest to coś, z czym będę musiał żyć w Javie, czy jest jakiś sposób na uniknięcie tej tablicy?

+0

Nie całkiem wyjaśnię, o co pytasz. – lichengwu

+2

To naprawdę dużo kodu standardowego, ale z drugiej strony, Eclipse może wygenerować to w mgnieniu oka :) –

+2

Tak, żyjemy z tego rodzaju blankietem w Javie. –

Odpowiedz

5

Spróbuj użyć Lombok (http://projectlombok.org/)

Można wygenerować ustawiające, pobierające i konstruktorów z zwykłych adnotacji.

+0

Demo jest imponujące, ale czekam tylko na wszystkie pułapki :) –

+4

Zawsze zastanawiałem się, jaki jest sens używania programów pobierających i ustawiających dla prywatnych użytkowników, jeśli nie robisz absolutnie żadnych weryfikacji? Dlaczego po prostu nie mieć członków publicznych (nawet bardziej, gdy pola są również ostateczne)? Rozumiem, że oddzielasz implementację od interfejsu, ale jeśli ustawiające i pobierające są bezpośrednio powiązane z nazwami zmiennych składowych, to w ten sposób pokonujesz cel, nie? – Supericy

+2

@Supericy Absolutnie zgadzam się na to. Opowiadałem się za tym stanowiskiem kilka razy w odpowiedzi na WR, co zwykle kończyło się negatywnymi głosami. Ich argumenty: wszystkie standardowe bzdury o "walidacji", które nigdy nie zdarzają się w rzeczywistości, podklasy "nadpisują" setera, itp. –