2013-06-07 11 views
8

Moi koledzy z drużyny wprowadzają mnie do nowej metody pisania ćwiczeń, która nie zwróci pustki.Praktyka, aby powrócić zamiast pustki w Javie

public class Test { 
    public Test doCalculations() { 
     //code 
     return this; 
    } 
    public Test appendTitle(String test) { 
     //code 
     return this; 
    } 
} 

Zamiast zwracać pustkę sugerują, aby zwrócić obiekt sam. Jedną z zalet tego podejścia, które mówią, możesz łączyć metody.

Zamiast pisać:

while(1) { 
    test.appendTitle("aaa"); 
    test.doCalculations(); 
    map.add(test); 
} 

Można pisać bardziej elegancki kod:

while(1) { 
    map.add(test.appendTitle("aaa").doCalculations()); 
} 

Jakie mogą być wady tej aproach? Czy sugerujesz włączenie go do codziennego użytku?

+3

Proponuję zajrzeć do wzoru projektu dekoratora. Oczywiście powinieneś pomyśleć, kiedy go zastosować. –

+1

Wywoływany _fluent interface_ (ale nie wyłącznie). Proponuję przedłużyć linię przed każdym ".". –

+0

W mojej obronie nie znalazłem tego pytania: "Korzyści ..", również pytanie jest tak zagadkowo tak zagadkowe, że wielu ludzi nie zrozumie, co się dzieje. –

Odpowiedz

2

Powiedziałbym, że to nie jest dobra praktyka. Patrząc na sygnaturę metody, która zwraca obiekt, skąd wiadomo, czy jest to całkowicie nowa instancja, która jest zwracana, czy też zwracana jest istniejąca. Zwróć uwagę, że w przypadku klas niezmiennych zmodyfikowane metody zwracają nową instancję klasa.

+4

Jeśli klasa nazywa się 'Builder' lub coś podobnego zamiast tego, jest to dość jasne IMO. – assylias

+0

Prawda, ale to pytanie wydaje się być bardziej ogólne niż to –

+1

Nie jest to zła praktyka, w rzeczywistości jest używane do wielu obiektów konfiguracyjnych, obiektów budowniczych, a do diabła, powinno być używane wszędzie tam, gdzie setery mogą być wywoływane częściej niż 1 2 razy. Powinno być dość oczywiste, że zwraca się samo, a nie nowe wystąpienie, w przeciwnym razie javadoc powinien to jasno określać. Przykłady wykorzystujące ten wzorzec: Kryteria Hibernacji, Astyanax, konfiguracja hadoopu Cloudera i wiele innych. Z pewnością ich twórcy wiedzą coś na temat rozwoju apisa, więc moim zdaniem zaakceptowana odpowiedź jest całkowicie błędna. –

Powiązane problemy