2015-09-04 3 views
1

Есть ли имя для этого techinique (метод вызывает возврат объектов, по которым выполняется вызов другого метода в той же строке)?Как вы это называете?

String pAID = commonAssets.getApplicationServerSettings().getSetting("plivoAuthID"); 

вместо

ApplicationServerSettings applicationServerSettings = commonAssets.getApplicationServerSettings(); 
String pAID = applicationServerSettings.getSetting("plivoAuthID"); 

Кроме того, когда я делаю первый, Eclipse не подсказывают мне импортировать класс ApplicationServerSettings, но это делает, если я использую второй стиль кода.

Кроме того, эти два стиля являются просто предпочтениями?

+0

размещать различные вызовы по разным строкам, например. place '.getSetting (" plivoAuthID ");' на другой строке (чтобы понимать отчеты о сбоях) –

ответ

7

Техника называется method chaining.

String pAID = commonAssets.getApplicationServerSettings().getSetting("plivoAuthID"); 

Определения из вики:

Метод цепочка, также известное как с именем параметр идиома, является общим синтаксисом для вызова нескольких вызовов методов в объектно-ориентированных языках программирования . Каждый метод возвращает объект, позволяющий звонить в единый оператор, не требуя переменные для хранения промежуточных результатов. [1] Локальная переменная декларации являются синтаксическим сахаром из-за трудности, с которой люди имеют с глубоко вложенными вызовами метода. [2] [3] Цепочка метода также известна как крушение поезда из-за увеличения числа методов, которые приходят один за другим в той же линии, что и в случае, когда все больше методов связаны с цепями [4], хотя разрывы строк часто добавляются между методов.

Ваш второй вопрос:

Кроме того, когда я делаю первый, Eclipse не подсказывают мне импортировать ApplicationServerSettings класса, но это делает, если я использую второй стиль кода.

  • Из определения снова «Каждый метод возвращает объект, позволяя вызовы быть соединены друг с другом в одном операторе, не требуя переменные для хранения промежуточных результатов.» Вот почему он не предлагает вам импортировать класс ApplicationServerSettings.

Другой пример (к тому же хочу, чтобы вы представить), что выглядит проще:

Посмотрите на пример вики:

class Person { 
    private String name; 
    private int age; 

    // In addition to having the side-effect of setting the attributes in question, 
    // the setters return "this" (the current Person object) to allow for further chained method calls. 

    public Person setName(String name) { 
     this.name = name; 
     return this; 
    } 

    public Person setAge(int age) { 
     this.age = age; 
     return this; 
    } 

    public void introduce() { 
     System.out.println("Hello, my name is " + name + " and I am " + age + " years old."); 
    } 

    // Usage: 
    public static void main(String[] args) { 
     Person person = new Person(); 
     // Output: Hello, my name is Peter and I am 21 years old. 
     person.setName("Peter").setAge(21).introduce(); 
    } 
} 
+0

почему downvote? –

+0

Это не метод цепочки точно –

+1

Я стою исправлено! Согласно вашей цитате, это действительно соответствует описанию. Я просто никогда не использовал эту фразу. Я превратил свой нижний план в верхний угол. – Rainbolt

1

Это часто называют свободно синтаксис.

ИМХО это вопрос стиля, нет правильного или неправильного.

Свободный синтаксис более лаконичен, что иногда бывает хорошим.

Другой вариант более удобен для отладки исходного уровня. Вы можете выполнять инструкции и проверять промежуточные результаты.

+0

«Свободный синтаксис» lol Какой приятный вызов –

+0

«Свободный» относится к одному специальному случаю цепочки методов: когда каждый последующий вызов происходит на объекте _same_. –

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