아무도 코드 행이 작동하는 방법이 설명 할 수 작동?어떻게 중첩 된 메소드 호출
답변
이것을 method chaining이라고합니다. 메서드 add()
은 실제로 메서드가 호출 된 현재 수정 된 개체 또는 동일한 유형의 새 개체에 대한 참조를 반환합니다. a
에 의해 참조 된 개체가 BigInteger 인 경우 a.add(b)을 호출하면 a+b
인 BigInteger
개체가 반환되므로 해당 개체에서 .add(c)
을 다시 호출 할 수 있습니다.
Rational sum = a.add(b).add(c);
// is equivalent to
Rational temp = a.add(b);
Rational sum = temp.add(c);
메서드 체이닝이 필요하지 않습니다. 잠재적으로는 가독성을 향상시키고 소스 코드의 양을 줄입니다. fluent interface을 구축하는 것이 핵심 개념입니다.
샘플 그림이 연습 Builder pattern에 주로 사용되는
, 당신은 StringBuilder 클래스의 API 자체에서이 패턴을 찾을 수 있습니다.
개체 b (인수)가 메서드를받는 방식을 이해하지 못합니까?
없음 이해가 a.add(b)
당신이 개체 a
에 방법 add()
를 호출하고 그것을 객체 b
의 참조를 전달하는 것을 의미, 잘못 없다. a.add(b)
메서드가 반환하는 결과 개체는 a
과 동일한 형식이며, 연속적으로 개체 c
의 참조를 해당 메서드에 전달하여 반환 된 개체에 대해 .add(c)
메서드를 호출합니다.
JLS, 컴파일러 또는 언어에서 설정 한 체이닝 깊이에 기술적 인 제한이 있습니까? – hexafraction
@hexafraction 나는 어떤 것도 모르고 연구 할 필요가있다. – NINCOMPOOP
분명히 * 명료도 * 제한이 있습니다! –
귀하의 경우체인의 각 메소드는 클래스 또는 인터페이스를 반환한다. 체인의 다음 메소드는 리턴 된 클래스의 일부 여야합니다.
a.add(b)
일부 CALSS/인터페이스를 반환하고 그 다음에
add(c)
를 호출에
그 방법은
- 1. 스프링 스톱워치 - 중첩 된 호출
- 2. 중첩 된 클래스와 정적 메소드
- 3. 중첩 된 메소드, 모범 사례
- 4. 중첩 된 getJSON 호출
- 5. 중첩 된 lua_CFunction 호출
- 6. 중첩 된 변수 호출
- 7. 스칼라 전용 메소드/함수 대 함수/중첩 된 메소드/함수
- 8. 면도기에서 중첩 된 Html.Action 호출
- 9. 중첩 된 클래스 변수 호출
- 10. 호출 된 메소드 찾기 - 역방향 호출 계층
- 11. Robolectric에서 호출 된 메소드 확인
- 12. 중첩 된 개인 생성자 호출
- 13. 메소드 호출
- 14. 파이프와 중첩 된 함수 호출
- 15. 메소드 호출
- 16. Java의 메소드 내에서 호출 된 메소드 가져 오기
- 17. Ruby/Rails에서 생성 된 문자열에서 메소드 호출
- 18. 중첩 된 리소스에서 정의되지 않은 메소드 has_one
- 19. 자바 스크립트에서 중첩 된 익명 메소드 클로저
- 20. 자바 측에서 호출 된 Android 네이티브 메소드
- 21. 기본 클래스 컬렉션에서 파생 된 메소드 호출
- 22. Ruby의 클래스 메소드 호출
- 23. 일부 파생 된 유형에만 존재하는 메소드 호출
- 24. 다른 활동의 메소드 호출
- 25. Java : 메소드 메인에있는 메소드 호출
- 26. 중공업 메소드 호출 블록
- 27. onclick()을 사용하여 중첩 된 함수 호출
- 28. 동적으로로드 된 모듈 perl의 메소드 호출
- 29. beginGeneratingDeviceOrientationNotifications에 의해 생성 된 메소드 호출 중지
- 30. Java 7에서 단순화 된 Varargs 메소드 호출
sum
가 찾아 "메소드 체인"을 반환합니다. 그리고 객체 b는 메소드를받지 못합니다. 메서드로 매개 변수로 전달됩니다. –