2015-08-31 3 views
-2
public int alertBox (String title, String message) { 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 

    alertDialogBuilder 
     .setTitle(title) <------ ???? 
     .setMessage(text) <--------- ????? 
     .setCancelable(false) 
     .setPositiveButton("OK",new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog,int id) { 
      dialog.cancel(); 
      } 
     }); 

    // create alert dialog 
    AlertDialog alertDialog = alertDialogBuilder.create(); 

    // show it 
    alertDialog.show(); 

    return 1; 
} 

Насколько я знаю, Java не имеет Visual Basic-подобный оператор «With object --- .property = xyz». т.е.Java С (Object) Statement

With x 
    .caption = "caption" 
... 

Может кто-нибудь объяснить, что происходит выше, что alertDialogBuilder в Android, кажется, есть возможность подразумеваемый объект?

Это относится к чему-либо еще в Java? В Android? Как узнать, когда это можно использовать. Это Android-Java? Можете ли вы использовать методы и функции, которые используют это?

ответ

2
alertDialogBuilder 
     .setTitle(title) <------ ???? 
     .setMessage(text) 

То есть method chaining в Java и называется Builder шаблон, где каждый метод этого экземпляра возвращает на это сам.

Записав его в простые линии, чтобы понять

alertDialogBuilder = alertDialogBuilder.setTitle(title); 
alertDialogBuilder =alertDialogBuilder.setMessage(text); 
--- 
+0

Значит, некоторые классы используют это, а некоторые нет?Это зависит от класса, то, правильно? –

+0

Точно. Это действительно зависит. –

+0

Я попробовал это на нескольких других классах, и это не сработало, так что это объясняет! –

1

Что происходит, это использование Builder Pattern. Методы набора задают значение и возвращают объект-строитель, что позволяет вам связывать вызовы.

Когда строитель «сделан», вы вызываете метод create на нем, чтобы вернуть нужный объект.

0

Линии, которые вы отметили <------ ????, являются продолжением предыдущей строки. Вы можете сказать по недостатку ;.

Методы setTitle, setMessage и т. Д. Возвращают экземпляр объекта (AlertDialog.Builder), на котором вы можете вызвать следующий метод. Возвращаемый объект на самом деле тот же, что и тот, на который вы вызываете метод. Это называется Builder pattern. В принципе, каждый из этих методов заканчивается return this;.

В качестве альтернативы можно:

alertDialogBuilder.setTitle(title); 
alertDialogBuilder.setMessage(text); 
alertDialogBuilder.setCancelable(false); 
... 
+0

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

1

Посмотрите на документацию для этого конкретных класса: http://developer.android.com/reference/android/app/AlertDialog.Builder.html

Он использует шаблон Builder Design, так что каждый метод возвращает обновленное объект для обеспечения цепочки. Например, посмотрите на setTitle:

общественного AlertDialog.Builder SETTITLE (CharSequence название)

Установить заголовок, отображаемый в диалоговом окне.

Возвращает Это Builder объект, чтобы для построения цепочки вызовов, чтобы установить методы

Вы можете увидеть, как в описании и в качестве возвращаемого типа, что позволяет СЦЕПЛЕНИЕ на цели. Опять же, это специфично для этого класса в Android, и в целом это не так, не говоря уже о Java.