2010-03-11 2 views
5

메 뉴가 여러 개의 매개 변수 인
을 입력으로 사용할 수 있지만 단일 객체 (또는 void) 만 반환 할 수 있도록 Java가 정의 된 이유는 무엇입니까?Java에서 여러 매개 변수를 사용할 수 있지만 단일 개체 만 반환 할 수있는 이유는 무엇입니까?

구현하거나 사용하는 것이 더 쉽게 언어를 만들었습니까?

+0

실제로 여러 인수를 반환하는 효율적인 방법에 대한 솔루션을 제공하지 않습니다. 레코드의 경우, 메소드가 인수를 리턴 할 수있게하려면, 필요한 유형의 캐시 된 배열 (길이 1)을 인수로 전달하고 첫 번째 필드를 설정하거나 오브젝트 배열을 리턴 할 수 있습니다. 그것을 사용하지만 피하고 싶은 불필요한 객체 생성. –

답변

5

아마도 이것이 C 및 C++에서 수행하는 방식 일 것이고 Java 언어 구문은 해당 언어와 매우 유사하기 때문일 것입니다.

는 사실, this article에 따르면, 고슬링은 C++ 컴파일러를 확장하여 시작, 그래서 그가 동일한 구문의 많은 따를 것을 의미합니다 :

개발보다 플랫폼 중립적 과정을 만들려면을 (그리고 Gosling은 C++ 컴파일러를 확장함으로써 시작되었습니다.

5

아마도 객체에 여러 개의 반환 값을 캡슐화하려는 의도일까요?

+0

개체가 참조로 전달된다는 사실에 신경 쓰지 마십시오. – Paul

0

내 생각에 컨벤션이 될 것입니다. 주요 OO 언어가하는 일입니다. 자바가 그랬습니다. 그러나 공식적인 주장은 아마도 클로저에 대한 논의와 같을 것이다. 실제로는 필요하지 않은 작업으로 평범한 작업을위한 표준 문법을 흐리게 만들지는 않을 것이다. 아니면 단일 메소드가 객체에 들어가야 만하는 관련 값을 반환해야한다고 생각했을 수도 있습니다. 또는 어쩌면 그들은 단지 그것을 생각하지 않았거나 시간이있었습니다 (꽤 표준 개발자 요금). 관련 메모에

, 나는 여러 반환을 조롱하는 클로저를 사용하는이 토론 발견 http://weblogs.java.net/blog/brucechapman/archive/2007/11/closures_and_mu.html

4

나는 확실히 모르겠어요,하지만 난 자바가 다른 스택 기반 런타임처럼 실행되는 것을 상상한다. 즉, 메서드로 매개 변수로 항목을 전달하는 것은 컨트롤을 메서드로 전달하기 전에 스택에 항목을 푸시하기 만하면 쉽게 수행 할 수 있습니다. 반환 값은 C 및 C++ do와 같이 VM에서 처리 될 수 있습니다. 반환 값은 항상 레지스터에 저장되며 이는 기본적으로 단일 값입니다.

제네릭의 경우 많은 값을 반환하는 것은 Tuple<type1, type2, type3>과 같은 인스턴스를 반환하여 형식이 안전한 방식으로 처리 될 수 있기 때문에 대부분의 경우 부담해야합니다. .

관련 문제