|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
Неоднократно сталкивался и не понимаю, как Ява выбирает тип конвертируемого выражения: 1) допустим System.out.println("123" + 123); понимает что это выражение "123" + 123 - это String, a ne int/float? 2) Как изо всех перегруженных(overloaded) методов подбирает наиболее подходящий. System.out.println(String) Заранее благодарен - если кинете ссылкой rtfm, на эти механизмы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 15:55 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
Ну так сначала происходит операция, там все правила изначально установлены: int + int = long, int + string = string и т.д. Метод после уже вызывается с заведомо известным типом параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 16:54 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
Хетт - а где есть такой список для операций, описанный где можно глянуть ? ? Если скажем System.out.println имеет входной параметр и Object и String, подаем String - и JVM берет метод для String(а ведь String и есть Object !), то это значит что всегда подбирает более "полный" метод ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:04 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
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. Так же, как в большинстве других языков. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:12 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
В java 8 например сломали приведение overloading Object к Object[]/varargs из чего некоторые познакомились с таким багом . ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 02:06 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
Спасибо большое понял как работает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 10:36 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
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" называется. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:02 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
IMHO Как сделаны шаблоны в C++ - вообще за гранью добра и зла. Пользоваться этим не возможно. Наверное, мазохисты которые к этому привыкли с детства, этого и не замечают. Но реализовывать шаблоны фактически макроподстановками - это какое-то безумие. На каких галюциногенах сидел Страуструп, когда это родил, то мне не ведомо. В Java, возможно генерики и "не доделанные", но по крайне мере, в полный маразм как в C++ не скатились На мой взгляд. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:11 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevIMHO Как сделаны шаблоны в C++ - вообще за гранью добра и зла. Пользоваться этим не возможно. Я бы условно выделил в c++ два подьязыка. Собственно C++ c ООП. И как отдельный слой - процессинг макросов и шаблонов. Причем с логгированием с отладкой последнего. И сертифицировал бы отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 19:31 |
|
Как Ява конвертирует выражения и выбирает перегруженные методы ?
|
|||
---|---|---|---|
#18+
Пылинка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 и т.д.). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 22:04 |
|
|
start [/forum/topic.php?fid=59&msg=39706081&tid=2121770]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 339ms |
total: | 500ms |
0 / 0 |