оказывается в java есть перегрузка методов по типу возвр. значения

pitrik2

Return-Type-Based Method Overloading in Java
вкратце там говорится о том, что можно
- руками править байткод добавляя в него перегруженные методы с другим типом возвращаемого значения
- чтобы вызывать потом метод, придется использовать рефлекшн, проходясь поиском по всем методам класса и находя тот который с нужным типом ретурна
- т.к. это неудобно предлагается унаследовать класс от двух интерфейсов и потом вызывать нужный метод через каст к интерфейсу, т.к. такое наследование запрещено, то чтобы ентого добиться предлагается также править байткод
- для удобства предлагается править байткод не ручками, а через спец тулзы, например библиотечку

ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or dynamically generate classes, directly in binary form. Provided common transformations and analysis algorithms allow to easily assemble custom complex transformations and code analysis tools.
ASM offer similar functionality as other bytecode frameworks, but it is focused on simplicity of use and performance. Because it was designed and implemented to be as small and as fast as possible, it makes it very attractive for using in dynamic systems*.
(*) ASM can of course be used in a static way too.

Dasar

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

pitrik2

неявной реализации интерфейса в Java-е нету?
ну блин
java - мега простой и консервативный язык

klyv

java - мега простой и консервативный язык
ну не консервативный, но минималистичный.

klyv

перегрузка методов по типу возвр. значения
а зачем?

pitrik2

ну это просто типа прикольно, эдакий хак языка
можно на собеседованиях гнобить вопросом как это сделать :)
ну еще это осложняет работу с декомпиленным кодом

klyv

можно на собеседованиях гнобить вопросом как это сделать :)
такие вопросы на собеседованиях просто лишние, т.к. это, как было замечено, баловство разработке ПО не помогает.
ну еще это осложняет работу с декомпиленным кодом
а разве это не осложняет работу скомпиленного кода? если был вызов одной такой функции, перегруженной ручками, а мы добавили ещё одну, JVM не обидится?

pitrik2

JVM не обидится?
ну раз даже через рефлекшен все окейно находится, то не вижу причин почему бы jvm это бы не понравилось

klyv

не вижу причин почему бы jvm это бы не понравилось
действительно...

bleyman

Недавно кстати узнал, что в .NET'e тоже теоретически можно. Ну, в мсиле явно указывается тип ожидаемого возращаемого значения и он умеет оверлоадить по нему. А в шарпе - нельзя, только лямбды немножко умеют.
Хм. Но я вроде явно видел жавакод, где генерики резолвились по возвращаемому значению. Так не получится?
Оставить комментарий
Имя или ник:
Комментарий: