Почему возвращаемые типы не учитываются при перегрузке метода Java?

StackOverflow https://stackoverflow.com/questions/2486128

Вопрос

Почему возвращаемый тип метода не учитывается при перегрузке метода ?Кто - нибудь может объяснить , как компилятор проверяет наличие перегруженных методов ?

Это было полезно?

Решение

Почему возвращаемый тип метода не учитывается при перегрузке метода?

Основная причина заключается в том, что если вы сделал учтите это, многие вызовы функций становятся неоднозначными, если возвращаемое значение чему-то не присвоено.Например, какой вызов функции вызывается здесь?

public String x() { ... }
public int x() { ... }

// ...

x();  // <-- Which one did you mean? It's impossible to tell if you
      //     allow return types to be part of method overloads.

Есть и другие причины не хотеть этого делать.Тем не менее, многие языки делай разрешить их сигнатурам отличаться только типом возвращаемого значения;Haskell и Perl - это два примера.Если ваш язык допускает это, нетрудно понять, что все, что вам нужно для поддержки этого, - это еще один шаг в процессе разрешения вашего метода:просто у компилятора есть очевидный способ выбрать тот или иной метод.В приведенном выше примере, возможно, мы бы определили приоритет (возможно, первый определенный метод - это тот, который выигрывает, например, поэтому наш x() вызов вызовет String x()).

Еще одна вещь, которую следует отметить, это то, что JVM делает разрешить существование двух методов, сигнатура которых отличается только типом возвращаемого значения.(Вот как Scala и другие языки JVM, которые поддерживают это, делают это.

Другие советы

Кто - нибудь может объяснить , как компилятор проверяет наличие перегруженных методов ?

Спецификация языка Java, раздел 8.4.9, будет содержать окончательный (но очень технический) ответ:http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.9

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top