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”,还是可以使用此语法的现有对象?
答案 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)
等等。