当我进行方法重载时,我总是碰到这些。如何在一行中编写第二种方法? View.setText(text)
会返回void
,但我想在TextView
执行setText()
后返回private ViewGroup getExpanableListChild() {
return (LinearLayout) LayoutInflater.from(this).inflate(
R.layout.list_checkbox, null);
}
private ViewGroup getExpanableListChild(String text) {
return ViewUtil.getTextViewFromParent(getExpanableListChild()).setText(
text);//compile error, can't return void.
}
。
注意:我知道我可以“用两种方式写出来”。问题是询问如何制作它。
{{1}}
答案 0 :(得分:1)
您可以在这些情况下使用Builder,但我不明白这一点。
例如:
return ViewUtil.getTextViewFromParent(getExpanableListChild()) //returns some kind of builder
.setText(text) // returns builder
.setColor(someColor) // another example, again returns builder
.build(); // returns ViewGroup
这与SDK中存在的策略相同,您可以使用AlertDialog.Builder
构建AlertDialog
答案 1 :(得分:0)
正如其他人所解释的那样,如果不改变ViewGroup.setText()
的实现,只是将'{1'}设置为您传递的任何内容,就无法执行此操作。
这样做将是一种更具功能性的编程风格。 Java在设计上不是一种自然功能语言,而void方法基本上与功能风格相反 - 即它们具有副作用(在这种情况下在ViewGroup对象上设置'text')。
调用void方法时,必须进行调用,然后对后续行中生成的修改对象(在本例中返回)执行某些操作。这就是命令式编程风格。