0

メソッドのオーバーロードを行うと、常にこれらにぶつかります。2番目のメソッドを1行で書くにはどうすればよいですか? View.setText(text)を返しますが、実行後voidに返したいです。 注:「2つのステートメントで書く」ことができることを知っています。質問は、それを1つにまとめる方法を尋ねています。TextViewsetText()

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

これは、AlertDialog.Builderどのビルドがある SDK に存在するのと同じ戦略です。AlertDialog

于 2013-01-13T19:24:25.163 に答える
0

他の人が説明したように、 の実装を変更して、渡したものに設定された「テキスト」でViewGroup.setText()a を返すことなしに、これを行うことはできません。ViewGroup

そうすることで、より機能的なプログラミング スタイルになります。Java は設計上自然に機能的な言語ではなく、void メソッドは基本的に関数型スタイルのアンチテーゼです。つまり、副作用があります (この場合、ViewGroup オブジェクトに「テキスト」を設定します)。

void メソッドを呼び出すときは、呼び出しを行い、その後の行で結果の変更されたオブジェクト (この場合はそれを返す) で何かを行う必要があります。それはまさに命令型プログラミング スタイルです。

于 2013-01-13T19:37:56.787 に答える