2013-01-13 39 views
0

我總是碰到這些,當我做方法重載。我怎樣才能在一行中寫第二種方法? View.setText(text)返回void,但是我想在執行setText()後返回TextView
注意:我知道我可以'寫成兩種說法'。問題是如何在一個。如何在一行中編寫匿名方法?

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. 

} 
+5

你不能輕易做到 - 兩條線有什麼問題? – assylias

+0

沒有太大的錯誤,但我總是碰到這些,當我想在做一個無效的方法後返回sometihng。 – wtsang02

+0

你是否擁有ViewUtil,ViewGroup等的代碼? –

回答

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

0

正如其他人所解釋的AlertDialog.Builder,你根本無法在不改變這樣做執行ViewGroup.setText()返回ViewGroup,其中'文本'設置爲您傳遞的任何內容。

要做到這一點將是一個更多功能的編程風格。 Java在設計上並不是一種自然的功能語言,而void方法基本上是功能風格的對立面 - 即它們有副作用(在這種情況下,在ViewGroup對象上設置'文本')。

當調用void方法時,有必要進行調用,然後對後續行中的結果修改對象(在這種情況下返回它)執行一些操作。這只是命令式的編程風格。