Подписывает ли подпись метода в Java свой тип возврата?

Является ли подпись метода в classе / интерфейсе Java его возвращаемым типом?

Пример:

Знает ли Java разницу между этими двумя методами:

public class Foo { public int myMethod(int param) {} public char myMethod(int param) {} } 

Или это может быть только список имени метода и параметров?

Цитата из Oracle Docs :

Определение. Два компонента объявления метода содержат подпись метода – имя метода и типы параметров.

введите описание изображения здесь

Поскольку вопрос был изменен, чтобы включить этот пример:

 public class Foo { public int myMethod(int param) {} public char myMethod(int param) {} } 

Нет, компилятор не узнает разницу, так как их подпись: myMethod(int param) – то же самое. Вторая строка:

  public char myMethod(int param) {} 

даст вам возможность ошибки: метод уже определен в classе , что еще раз подтверждает вышеуказанный оператор.

Является ли подпись метода classа в Java включенным типом возврата?

В Java это не так, но в этом JVM это делает, что может привести к очевидной путанице.

Является ли подпись интерфейса в Java включенным типом возврата?

То же, что и для classа мето.

Или только имя метода и список параметров?

Имя метода и типы параметров для Java. Например, annotations параметров и имена не имеют значения.

При обратном типе байтового кода является частью сигнатуры метода. Учти это

 public class Test1 { public Test1 clone() throws CloneNotSupportedException { return (Test1) super.clone(); } } 

в байтекоде есть 2 метода clone ()

 public clone()LTest1; throws java/lang/CloneNotSupportedException public clone()Ljava/lang/Object; throws java/lang/CloneNotSupportedException 

они отличаются только возвращаемым типом.

Нет на Java. Имя метода и список параметров предназначены только для подписи метода . Тип возврата не включает.

Java Language Spec говорит

Два метода имеют одну и ту же подпись, если они имеют одинаковые имена и типы аргументов.

таким образом, нет, тип возврата не является частью сигнатуры метода

,

Bro, В java мы используем для вызова методов по их имени и их параметрам только для использования их в нашем коде, например

myMethod (20, 40)

поэтому JAVA ищет только аналогичное соответствие в соответствующем объявлении (name + param), поэтому подпись метода включает только имя и параметры метода. 🙂

Подпись метода – это только имя и список параметров.

В JAVA и многих других языках вы можете вызвать метод без переменной, чтобы сохранить возвращаемое значение. Если тип возврата является частью сигнатуры метода, нет способа узнать, какой метод будет вызываться при вызове без указания возвращаемого значения переменной удерживания.

нет, в Java подпись метода не включает тип возвращаемого значения, но объявление делает.

 public String getString(String myString) ^access modifier ^return type ^name ^parameter type and name 

отредактированный на основе обратной связи ниже 🙂

Тип возврата не включается в подпись метода. Только имя метода и параметры определяются как подпись метода.

Reffer: Oracle Docs ‘Определение методов’

Используя AspectJ (org.aspectj.lang.reflect.MethodSignature), он имеет тип возврата

ПОДПИСЬ МЕТОДА ВКЛЮЧАЕТ ТИП ВОЗВРАТА.

Компилятор игнорирует это, когда должен проверять дубликаты. Для Java запрещено использование двух методов с сигнатурой, отличающейся только типом возврата.

Попробуй это:

 public class Called { public String aMethod() { return ""; } } public class Caller { public static void main(String[] main) { aMethod(); } public static void aMethod() { Called x = new Called(); x.aMethod(); } } 

Создайте проект, перейдите в каталог bin, скопируйте Caller.cass где-нибудь. Затем измените вызываемый метод:

 public int aMethod() { return 0; } 

Создайте проект, вы увидите, что и Called.class, и Caller.class имеют новую временную метку. Замените Caller.class выше и запустите проект. У вас будет исключение:

 java.lang.NoSuchMethodError: it.prova.Called.aMethod()Ljava/lang/String; 

Подпись метода – это только имя и параметры метода. Но я считаю, что ваш пример будет генерировать ошибку, если они должны быть в одном classе. Вы можете просто протестировать его на любом идее и увидеть, что компилятор выдаст ошибку

Если вы попытаетесь запустить код, упомянутый в eclipse, вы получите ответ о том, какие элементы компилятор java ищет для дифференциации среди java-методов:

 class Foo { public int myMethod(int param) { return param;} public char *myMethod*(int param) { //this line throws an error return param; } } 

Ошибка: Duplicate метод myMethod (int) в типе Foo.

  • getLocationOnScreen () vs getLocationInWindow ()
  • Android RecyclerView добавление и удаление элементов
  • Почему double width = 50/110000; выход составляет 0,000000000000000?
  • Как изменить fragmentы с помощью Android-навигатора
  • Android ClassNotFoundException: не нашел class на пути
  • Какая версия JDK (уровень языка) требуется для Android Studio?
  • Как использовать устаревший HTTP-клиент Apache на Android Marshmallow?
  • Не удалось выполнить com.google.android.gms play-services-auth: 11.4.0
  • Как очистить кеш проекта в идее Intellij, например, Eclipse?
  • Попытка вызвать виртуальный метод 'android.view.Window $ Callback android.view.Window.getCallback ()' для ссылки на нулевой объект
  • Как вы можете получить адрес электронной почты пользователя Android?
  • Interesting Posts

    Ошибка с несколькими определениями функции

    Как избежать ошибок точности с плавающей запятой с помощью float или double в Java?

    Проблемы с ADC / SBB и INC / DEC в узких петлях на некоторых процессорах

    как получить последний идентификатор вставки после вставки запроса в активную запись codeigniter

    преобразовать большой endian в little endian в C

    Как правильно очистить клавиатуру ноутбука Acer после разлива?

    Почему я не могу изменить раздел реестра Windows 7?

    Какова инициализация по умолчанию массива в Java?

    Является ли fmod () точным, когда y является целым числом?

    Как немедленно закрыть консольное приложение C ++?

    EJB 3.0 – Вложенная транзакция! = Требуется Новое?

    Не удалось открыть / создать внутреннюю сеть Vagrant на Windows10

    ExpressCache против технологий быстрого хранения Intel и интеллектуальных ответных технологий

    Угловой 2.0. Разница @View @Component

    Получение позиции мыши в c #

    Давайте будем гением компьютера.