Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как Ява конвертирует выражения и выбирает перегруженные методы ? / 10 сообщений из 10, страница 1 из 1
19.09.2018, 15:55
    #39705087
razliv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
Неоднократно сталкивался и не понимаю, как Ява выбирает тип конвертируемого выражения:
1) допустим

System.out.println("123" + 123);

понимает что это выражение "123" + 123 - это String, a ne int/float?

2) Как изо всех перегруженных(overloaded) методов подбирает наиболее подходящий.
System.out.println(String)

Заранее благодарен - если кинете ссылкой rtfm, на эти механизмы.
...
Рейтинг: 0 / 0
19.09.2018, 16:54
    #39705125
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
Ну так сначала происходит операция, там все правила изначально установлены: int + int = long, int + string = string и т.д.
Метод после уже вызывается с заведомо известным типом параметра.
...
Рейтинг: 0 / 0
19.09.2018, 17:04
    #39705135
razliv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
Хетт - а где есть такой список для операций, описанный где можно глянуть ? ?

Если скажем System.out.println имеет входной параметр и Object и String,
подаем String - и JVM берет метод для String(а ведь String и есть Object !),
то это значит что всегда подбирает более "полный" метод ?
...
Рейтинг: 0 / 0
19.09.2018, 17:12
    #39705143
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
razlivХетт - а где есть такой список для операций, описанный где можно глянуть ? ?

Если скажем System.out.println имеет входной параметр и Object и String,
подаем String - и JVM берет метод для String(а ведь String и есть Object !),
то это значит что всегда подбирает более "полный" метод ?
1. Правила неявного приведения описаны в документации Java - https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html
2. Компилятор выбирает не "более полный", а точно соответствующий по сигнатуре метод. Если передали только String, то компилятор ищет метод с единственным параметром типа String. Так же, как в большинстве других языков.
...
Рейтинг: 0 / 0
20.09.2018, 02:06
    #39705328
cossack5
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
В java 8 например сломали приведение overloading Object к Object[]/varargs из чего некоторые познакомились с таким багом .
...
Рейтинг: 0 / 0
20.09.2018, 10:36
    #39705468
razliv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
Спасибо большое понял как работает :)
...
Рейтинг: 0 / 0
21.09.2018, 13:02
    #39706079
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
cossack5В java 8 например сломали приведение overloading Object к Object[]/varargs из чего некоторые познакомились с таким багом .
Помню как Брюс Экел неистовствовал по поводу того КАК внедрили дженерики. Он продвигал вполне здравую мысль, что нужно тут сделать КАК ПОЛОЖЕНо, как например в C++. Пусть даже для этого придется вырезать обратную совместимость с JAVA 1.4 и ниже. И сделать тулузу для перекодирования в "Новую JAVA", для тех кто желает старый код использовать. И вот он вам, еще один привет из прошлого - авторFinally, special casing inference with varargs might prove very difficult, because of the same compatibility constraints I've outlined before (i.e. 1.4 clients must be able to see varargs method as plain array-accepting methods). И сколько др. проблем с дженериками можно было бы избежать.
Вот скажите, кого сейчас волнует обратная совместимость с JAVA 1.4?

PS Кстати Брюс выпустил новую книжку по JAVA 8 - "On JAVA 8" называется.
...
Рейтинг: 0 / 0
21.09.2018, 13:11
    #39706081
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
IMHO Как сделаны шаблоны в C++ - вообще за гранью добра и зла. Пользоваться этим не возможно. Наверное, мазохисты которые к этому привыкли с детства, этого и не замечают. Но реализовывать шаблоны фактически макроподстановками - это какое-то безумие. На каких галюциногенах сидел Страуструп, когда это родил, то мне не ведомо.

В Java, возможно генерики и "не доделанные", но по крайне мере, в полный маразм как в C++ не скатились

На мой взгляд.
...
Рейтинг: 0 / 0
21.09.2018, 19:31
    #39706275
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
Leonid KudryavtsevIMHO Как сделаны шаблоны в C++ - вообще за гранью добра и зла. Пользоваться этим не возможно.
Я бы условно выделил в c++ два подьязыка. Собственно C++ c ООП. И как отдельный слой - процессинг макросов и шаблонов. Причем с логгированием с отладкой последнего.

И сертифицировал бы отдельно.
...
Рейтинг: 0 / 0
21.09.2018, 22:04
    #39706311
cossack5
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Ява конвертирует выражения и выбирает перегруженные методы ?
Пылинкаcossack5В java 8 например сломали приведение overloading Object к Object[]/varargs из чего некоторые познакомились с таким багом .
Помню как Брюс Экел неистовствовал по поводу того КАК внедрили дженерики. Он продвигал вполне здравую мысль, что нужно тут сделать КАК ПОЛОЖЕНо, как например в C++. Пусть даже для этого придется вырезать обратную совместимость с JAVA 1.4 и ниже. И сделать тулузу для перекодирования в "Новую JAVA", для тех кто желает старый код использовать. И вот он вам, еще один привет из прошлого -
Чтобы бы запилить нормальные дженерики не пришлось бы ломать совместимость - т.е. старый код продолжил работать. Пришлось бы просто добавить параметризованные коллекции (т.е. List<T>, Queue<T> и т.д.), и старые непараметризованные коллекции были бы несовместимы с новыми (так сделали в C#). Т.е. тот кто бы хотел параметризовать коллекции просто бы заимпортил нужный пэкидж (вместо java.util было бы java.util.generic). Но нет бл?*:!, захотели (хз, почему), чтобы старые коллекции продолжали использоваться. Любопытно, что некоторые люди которые там работали (напр. Neal Gafter - здесь он пишет о совместном подвиге ) после этого смылись (Neal Gafter ушел делать C#, Одерский ушел делать Scala и т.д.).
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как Ява конвертирует выражения и выбирает перегруженные методы ? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]