Включает ли подпись метода в классе / интерфейсе Java его тип возвращаемого значения?
Пример:
Знает ли Java разницу между этими двумя методами:
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
Или, может быть, имеет значение только название метода и список параметров?
java
method-signature
Faressoft
источник
источник
Ответы:
Цитата из Oracle Docs :
Поскольку вопрос был отредактирован, чтобы включить этот пример:
Нет, компилятор не заметит разницы, так как их подпись:
myMethod(int param)
одинаковая. Вторая строка:выдаст вам ошибку: метод уже определен в классе , что дополнительно подтверждает приведенное выше утверждение.
источник
foo.bar(baz);
?В Java этого не происходит, но в этой JVM это происходит, что может привести к очевидной путанице.
То же, что и для методов класса.
Имя метода и типы параметров для Java. Например, не имеют значения аннотации и названия параметров.
источник
На уровне байт-кода «тип возврата» является частью сигнатуры метода. Учти это
в байт-коде есть 2 метода clone ()
они различаются только типом возвращаемого значения.
источник
Нет, не на Java. Имя метода и список параметров предназначены только для подписи метода . Тип возврата не включает.
источник
В JAVA и многих других языках вы можете вызвать метод без переменной для хранения возвращаемого значения. Если тип возвращаемого значения является частью сигнатуры метода, невозможно узнать, какой метод будет вызван при вызове, без указания переменной, содержащей возвращаемое значение.
источник
Спецификация языка Java говорит
таким образом, Нет, тип возвращаемого значения не является частью сигнатуры метода.
источник
Братан, в java мы используем для вызова методов по их имени и параметрам только для того, чтобы использовать их в нашем коде, например
myMethod (20, 40)
Итак, JAVA ищет только аналогичный материал, соответствующий их соответствующему объявлению (имя + параметр), поэтому подпись метода включает только имя и параметры метода. :)
источник
Подпись метода - это только имя и список параметров.
источник
нет, в Java сигнатура метода не включает возвращаемый тип, но декларация включает.
отредактировано на основе отзывов ниже :)
источник
String method( String s )
иDouble method( String s )
в том же классе.method signature
method declaration
Тип возвращаемого значения не включается в сигнатуру метода. В качестве сигнатуры метода определяются только имя метода и параметры .
Reffer: Oracle Docs 'Определение методов'
источник
Используя AspectJ (org.aspectj.lang.reflect.MethodSignature), он имеет возвращаемый тип
источник
ПОДПИСЬ МЕТОДА ВКЛЮЧАЕТ ТИП ВОЗВРАТА.
Компилятор игнорирует это, когда ему нужно проверить дубликаты. Для Java незаконно иметь два метода с сигнатурой, отличающейся только типом возвращаемого значения.
Попробуй это:
Соберите проект, перейдите в каталог bin, скопируйте куда- нибудь Caller.cass . Затем измените вызываемый метод:
Постройте проект, вы увидите, что и Called.class, и Caller.class имеют новую метку времени. Замените Caller.class выше и запустите проект. У вас будет исключение:
источник
Подпись метода - это только имя и параметры метода. Но я считаю, что ваш пример вызовет ошибку, если они будут в одном классе. Вы можете просто протестировать его на любом ide и увидеть, что компилятор выдаст ошибку
источник
Если вы попытаетесь запустить код, который вы упомянули в eclipse, у вас будет ответ относительно того, какие элементы java-компилятор ищет для различения между java-методами:
Вызывается ошибка: Дублировать метод myMethod (int) в типе Foo.
источник