Почему тип возврата не рассматривают при дифференциации методов? [дубликат]

5
задан Community 23 May 2017 в 11:48
поделиться

5 ответов

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

13
ответ дан 18 December 2019 в 11:53
поделиться

Потому что по вызову метода нельзя сказать, каким должен быть возвращаемый тип. Компилятор должен иметь возможность сказать, используя только информацию на сайте вызова, какой метод вызывать. Возвращаемые значения могут быть отброшены, поэтому вы не можете вообще знать, что существует возвращаемое значение и каков его тип. это становится еще более запутанным, когда вы начинаете думать о приведении типов (short-> int) или приведениях.

Обычно, когда компилятор видит вызов метода, он знает, что все аргументы должны присутствовать, чтобы вызов метода был допустимым, поэтому он может использовать эти аргументы для поиска правильного метода для вызова. Но возвращаемые значения не будут известны во время вызова, и даже тип возвращаемого значения может быть недоступен для обнаружения.

2
ответ дан 18 December 2019 в 11:53
поделиться

Любой данный сайт вызова может успешно использовать несколько различных типов возвращаемых значений, по крайней мере, из-за полиморфизма и авто (не) бокса, так что для этого потребуются правила для работы с неоднозначными случаями. , или работать только в простых обстоятельствах.

0
ответ дан 18 December 2019 в 11:53
поделиться

Я просто хотел указать, что - хотя это невозможно в Java - Ada поддерживает перегрузку, основанную исключительно на возвращаемых типах. Тем не менее, лучшее объяснение Google того, как это работает, - это сообщение о переполнении стека:

Перегрузка функции по типу возвращаемого значения?

0
ответ дан 18 December 2019 в 11:53
поделиться

Потому что вызывающий метод должен передать тип возврата вызываемому методу.

Так что у вас есть

Public Integer doStuff(String thing) { };

и

Public Double doStuff(String thing) { };

Класс, вызывающий doStuff, должен будет сказать классу использовать doStuff, который принимает строку (уже принимает), а возвращает Double (не возвращает).

Причина, по которой java делает это? Чтобы предотвратить ужасный код, как я перечислил выше, я полагаю :) Перегрузку легко испортить, и я не уверен, что вижу пользу для приведенного выше случая.

0
ответ дан 18 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: