2013-06-07 3 views
8

Мои товарищи по команде познакомит меня с новым методом написания практики, который не будет возвращать пустоту.Практика возврата себя вместо void в Java

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

Вместо того, чтобы возвращать пустоту, они предлагают вернуть объект сам. Говорят, одно из преимуществ этого подхода: вы можете цеплять методы.

Вместо того чтобы писать:

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

Вы можете написать более элегантный код:

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

Что может быть Недостатками этого ПОДХОД? Вы предлагаете включить его в ежедневное использование?

+3

Предлагаю вам ознакомиться с рисунком декоратора. Конечно, вы должны подумать, когда его применять. –

+1

Вызывается _fluent interface_ (но не исключительно). Я предлагаю разбить строку перед каждым '.'. –

+0

В моей защите я не нашел этот вопрос: «Преимущества ...», также вопрос задается настолько загадочно, я не думаю, что многие люди поймут, что происходит. –

ответ

2

Я бы сказал, что это не очень хорошая практика. Посмотрев на подпись метода, которая возвращает объект, как я могу узнать, является ли он полностью новым экземпляром, возвращаемым или возвращаемым существующим. Обратите внимание, что в случае неизменяемых классов модифицированные методы возвращают новый экземпляр класс.

+4

Если класс называется 'Builder' или что-то подобное, это довольно ясно IMO. – assylias

+0

Правда, но этот вопрос кажется более общим, чем это –

+1

Это не плохая практика, на самом деле она используется для многих объектов конфигурации, объектов-строителей и, черт возьми, должна использоваться везде, где сеттеры могут быть вызваны более чем 1- 2 раза. Должно быть довольно очевидно, что он возвращает себя, а не новый экземпляр, иначе javadoc должен четко заявить об этом. Примеры, которые используют этот шаблон: Hibernate Criteria, Astyanax, конфигурацию hadoop Cloudera и многие другие. Разумеется, их разработчики кое-что знают о разработке apis, поэтому, на мой взгляд, принятый ответ абсолютно неверен. –

Смежные вопросы