Size: a a a

Programming Offtop

2020 August 16

VP

Vladimir Petrakovich in Programming Offtop
(
Всегда казалось, что возвращаемый тип не включается в сигнатуру
В JVM включается
источник

AN

Alexander Nozik in Programming Offtop
(
Всегда казалось, что возвращаемый тип не включается в сигнатуру
В JVM включается, в Java нет
источник

KD

Konstantin Dovnar in Programming Offtop
Alexander Nozik
В JVM включается, в Java нет
Как это так? Я могу написать валидный код на Java, который будет не валиден на jvm?
источник

AN

Alexander Nozik in Programming Offtop
Konstantin Dovnar
Как это так? Я могу написать валидный код на Java, который будет не валиден на jvm?
Наоборот. Можно написать невалидный код на java, который будет при этом теоретически возможен в байт-коде
источник

AM

Andrew Mikhaylov in Programming Offtop
Konstantin Dovnar
Как это так? Я могу написать валидный код на Java, который будет не валиден на jvm?
Наоборот.
источник

AM

Andrew Mikhaylov in Programming Offtop
JVM позволяет больше, чем Java.
источник

AN

Alexander Nozik in Programming Offtop
Andrew Mikhaylov
JVM позволяет больше, чем Java.
Да, в чем-то больше, в чем-то меньше. К примеру дженериков в Jvm нет. Они только на языковом уровне
источник

AM

Andrew Mikhaylov in Programming Offtop
Alexander Nozik
Да, в чем-то больше, в чем-то меньше. К примеру дженериков в Jvm нет. Они только на языковом уровне
Аргумент
источник

KD

Konstantin Dovnar in Programming Offtop
Хм.
Погодите.
В Java возвращаемый тип не включается.

Т.е.
int foo() { return 1; }
double foo() { return 1.0; }

валидный код. Но на JVM оно свалится.
источник

AN

Alexander Nozik in Programming Offtop
Konstantin Dovnar
Хм.
Погодите.
В Java возвращаемый тип не включается.

Т.е.
int foo() { return 1; }
double foo() { return 1.0; }

валидный код. Но на JVM оно свалится.
Наоборот, оно нескомпилируется. Но функции с такой сингатурой могут существовать в байткоде
источник

AM

Andrew Mikhaylov in Programming Offtop
Konstantin Dovnar
Хм.
Погодите.
В Java возвращаемый тип не включается.

Т.е.
int foo() { return 1; }
double foo() { return 1.0; }

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

AN

Alexander Nozik in Programming Offtop
При этом в котлин скомпилируется, если ошибка и будет, то в месте использования, если компилятор не может тип вывести
источник

AM

Andrew Mikhaylov in Programming Offtop
Alexander Nozik
При этом в котлин скомпилируется, если ошибка и будет, то в месте использования, если компилятор не может тип вывести
Ух ты, а я и не пробовал. А как оно на границе интеропа себя чувствует?
источник

AN

Alexander Nozik in Programming Offtop
Andrew Mikhaylov
Ух ты, а я и не пробовал. А как оно на границе интеропа себя чувствует?
Без понятия, у меня 100% котлин уже с год как. Я пробовал, работает. Но да, в месте использования надо явно как-то тип указывать
источник

AM

Andrew Mikhaylov in Programming Offtop
Надеюсь, не забуду попробовать, как у машины буду :)
источник

AN

Alexander Nozik in Programming Offtop
Andrew Mikhaylov
Надеюсь, не забуду попробовать, как у машины буду :)
Хотя на простом примере выдает conflicting overloads... Странно
источник

KD

Konstantin Dovnar in Programming Offtop
А, всё, понял.
Так ещё куда не шло, ибо на моменте компиляции грохнет.
источник

AN

Alexander Nozik in Programming Offtop
The types of the parameter list, together with the return type, is known as a function's signature, but the return type cannot be used to disambiguate overloaded functions.
источник

AN

Alexander Nozik in Programming Offtop
Таки я не прав, там по сигнатуре можно отличать функции, но перегружать нельзя.
источник

AN

Alexander Nozik in Programming Offtop
источник