0

当我进行方法重载时,我总是碰到这些。如何在一行中编写第二种方法?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.

}
4

2 回答 2

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

于 2013-01-13T19:24:25.163 回答
0

正如其他人所解释的那样,您根本无法做到这一点,而无需更改实现ViewGroup.setText()以返回 aViewGroup并将“文本”设置为您传递的任何内容。

这样做将是一种更具功能性的编程风格。Java 在设计上并不是一种自然的函数式语言,而 void 方法基本上是函数式风格的对立面——即它们有副作用(在这种情况下,在 ViewGroup 对象上设置“文本”)。

当调用 void 方法时,有必要进行调用,然后在后续行中对生成的、修改后的对象(在本例中返回它)执行某些操作。这只是命令式编程风格。

于 2013-01-13T19:37:56.787 回答