什么是这个倍数'。'句法?

时间:2012-02-22 13:31:43

标签: java

new AlertDialog.Builder(this)
  .setMessage(mymessage)
  .setTitle(title)
  .setCancelable(true)
  .setNeutralButton(android.R.string.cancel,
     new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog, int whichButton){}
     })
  .show();

嗨,有人可以解释这个java语言特性的调用,能够调用方法而不直接在'。'之前指定对象。 ?

我想了解更多有关如何使用此内容的信息......

并且只能使用“new”,还是可以使用此语法的现有对象?

6 个答案:

答案 0 :(得分:6)

这称为method chaining

它不需要Java语言的任何特殊支持。有问题的每个函数(setMessage()setTitle()等)只返回this,从而允许链接。

有关详细信息,请参阅How to do method chaining in Java? o.m1().m2().m3().m4()

  

它只适用于“new”,或者我可以使用具有此语法的现有对象

如果方法返回this,则此技术可以使用或不使用new

答案 1 :(得分:2)

它被称为方法链接

你实际上是在对象上调用方法:

new AlertDialog.Builder(this)返回一个对象。

在该对象上调用setMessage(mymessage),然后获得另一个对象,依此类推。

答案 2 :(得分:1)

Method Chaining。每个方法都返回一个返回给自己的引用,允许您在其上调用另一个方法,依此类推。 jQuery在JavaScript世界中经常使用它。

答案 3 :(得分:1)

它是可链接的语法,可以与方法返回此对象的任何对象一起使用。

答案 4 :(得分:1)

你错过了这一点 在大多数语言的代码文件中忽略空格,因此您看到的实际上是一个长线拆分以便于阅读

 new alertDialog.Builder(this).setMessage(mymessage).setTitle(title).setCancelable(true).setNeutralButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton){}}).show();

你明白了

答案 5 :(得分:1)

代码行以分号结束。你所拥有的(格式化)与:

相同
new AlertDialog.Builder(this).setMessage(mymessage).setTitle(title).setCancelable(true).setNeutralButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton){}}).show();

我认为您会同意换行符使其更具可读性!

现在,链中的每个方法都被实现为返回this作为有用的“副作用”(在意图意义上,而不是功能意义上) - 这意味着myBuilder.setMessage(myMessage)返回修改后的myBuilder,然后您可以自由使用.setTitle(title)等等。