powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как Ява конвертирует выражения и выбирает перегруженные методы ?
10 сообщений из 10, страница 1 из 1
Как Ява конвертирует выражения и выбирает перегруженные методы ?
    #39705087
razliv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неоднократно сталкивался и не понимаю, как Ява выбирает тип конвертируемого выражения:
1) допустим

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

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

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

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

Если скажем System.out.println имеет входной параметр и Object и String,
подаем String - и JVM берет метод для String(а ведь String и есть Object !),
то это значит что всегда подбирает более "полный" метод ?
...
Рейтинг: 0 / 0
Как Ява конвертирует выражения и выбирает перегруженные методы ?
    #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
Как Ява конвертирует выражения и выбирает перегруженные методы ?
    #39705328
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В java 8 например сломали приведение overloading Object к Object[]/varargs из чего некоторые познакомились с таким багом .
...
Рейтинг: 0 / 0
Как Ява конвертирует выражения и выбирает перегруженные методы ?
    #39705468
razliv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое понял как работает :)
...
Рейтинг: 0 / 0
Как Ява конвертирует выражения и выбирает перегруженные методы ?
    #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
Как Ява конвертирует выражения и выбирает перегруженные методы ?
    #39706081
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO Как сделаны шаблоны в C++ - вообще за гранью добра и зла. Пользоваться этим не возможно. Наверное, мазохисты которые к этому привыкли с детства, этого и не замечают. Но реализовывать шаблоны фактически макроподстановками - это какое-то безумие. На каких галюциногенах сидел Страуструп, когда это родил, то мне не ведомо.

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

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

И сертифицировал бы отдельно.
...
Рейтинг: 0 / 0
Как Ява конвертирует выражения и выбирает перегруженные методы ?
    #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
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как Ява конвертирует выражения и выбирает перегруженные методы ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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