2010-06-16 9 views

답변

13

이므로 할당 방법을 실행할 때 결과가 할당되지 않습니다. 그렇다면 컴파일러는 과부하 된 것을 호출하기를 어떻게 알 수 있습니까? 모호함이있을 것입니다.

+0

무엇 반환 된 값에 발생 : 아직 그 작동 방법에 대한 구글의 최고 explaination 스택 오버플 포스트는? 그들은 GC를 얻었나요? – Pierreten

+3

@Pierreten : 다른 곳에서 참조되지 않은 경우 (예 : 메소드 내부에서 참조), 그렇다. – BalusC

0

호출하는 메서드는 호출되는 메서드에 반환 형식을 전달해야하기 때문에.

그래서 당신은 (

Public Integer doStuff(String thing) { }; 

Public Double doStuff(String thing) { }; 

문자열을 (이미 않습니다) 소요 doStuff를 사용하는 클래스를 말할 필요가 doStuff를 호출하는 클래스는 더블을 반환이 하지 않는다).

이유는 무엇입니까? 위에 나열된 것처럼 끔찍한 코드를 방지하기 위해 :) 오버로드는 혼란을 일으키기 쉽고 위의 경우에 이점이 있는지 확신하지 못합니다.

2

메쏘드 호출만으로 리턴 타입이 무엇인지 알 수 없기 때문에. 컴파일러는 호출 사이트의 정보 만 사용하여 호출 할 메소드를 알릴 수 있어야합니다. 반환 값은 버려 질 수 있으므로 일반적으로 반환 값이 있고 그 유형이 무엇인지 알 수 없습니다. coersions (short-> int) 또는 캐스트에 대해 생각하기 시작하면 더욱 혼란스러워집니다.

기본적으로 컴파일러가 메서드 호출을 볼 때 유효한 메서드 호출이되기 위해 모든 인수가 있어야한다는 것을 알고 있으므로 해당 인수를 사용하여 호출 할 올바른 메서드를 찾을 수 있습니다. 그러나 반환 값은 호출 할 때 알 수 없으며 리턴 값의 유형조차도 발견되지 않을 수 있습니다.

0

다형성 및 자동 (un) 권투로 인해 모든 주어진 호출 사이트에서 여러 가지 반환 유형을 성공적으로 사용할 수 있으므로 모호한 사례를 처리하기위한 규칙이 필요하거나 단순한 경우에만 작동합니다 상황.

관련 문제