2013-01-13 3 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

쉽게 수행 할 수 없습니다. 2 줄의 문제점은 무엇입니까? – assylias

+0

나쁘지는 않지만, void 메소드를 수행 한 후 sometihng를 반환하고 싶을 때 항상 이것들에 부딪칩니다. – wtsang02

+0

ViewUtil, ViewGroup 등의 코드를 소유하고 있습니까? –

답변

1

이러한 경우에는 빌더를 사용할 수 있지만이 경우에는 요점이 표시되지 않습니다. 예를 들어

:

return ViewUtil.getTextViewFromParent(getExpanableListChild()) //returns some kind of builder 
     .setText(text) // returns builder 
     .setColor(someColor) // another example, again returns builder 
     .build(); // returns ViewGroup 

이것은 당신이 다른 사람이 설명했듯이 AlertDialog

0

을 구축 AlertDialog.Builder, 당신은 단순히을 변경하지 않고이 작업을 수행 할 수있는 SDK에서 같은 전략 존재 구현 'ViewGroup.setText()ViewGroup 반환'텍스트 '당신이 무엇이든 통과로 설정합니다.

이렇게하면보다 기능적인 프로그래밍 스타일이됩니다. 자바는 자연적으로 기능적으로 설계된 언어가 아니며 void 메소드는 기본적으로 기능 스타일의 반대입니다. 즉, 부작용이 있습니다 (이 경우 ViewGroup 객체에 '텍스트'설정).

void 메소드를 호출 할 때는 호출을 한 다음, 결과로 수정 된 객체 (이 경우 반환)를 후속 라인에서 수행해야합니다. 그것은 단지 명령형 프로그래밍 일뿐입니다.

관련 문제