К сожалению, ответ @BasilBourque вводит в заблуждение, хотя он цитирует полезные объекты.
Эта функция никоим образом не будет представлена через субинтерфейс. SortedMap/NavigableMap не применимы: механизма default
не было, когда был представлен NavigableMap
!
На этом этапе может оказаться целесообразным ввести некоторые или все методы в NavigableMap
как методы default
в SortedMap
с реализациями, которые работают с отсортированными картами и которые в конечном итоге будут автоматически переопределены любыми импликациями Map, которые уже реализовали NavigableMap (поскольку они переопределили все те, что в их реализации).
Однако это означает, что «Эй, посмотрите на NavigableMap, который аналогичен SortedMap точно так же, как вы хотите сделать с Comparable», является вводящим в заблуждение аргументом: ваше предложение включает добавление методов по умолчанию. Этого просто не было на столе тогда.
В конце концов, то, что вы хотите, «почти, но не полностью, обратно совместимо». Архитекторы Oracle/Java Lang часто говорят, что «java не нарушает обратную совместимость», но это грубое упрощение и граничащая ложь. Если вы спросите немного дальше, они в конце концов признают, что это неправда: Суть дела в том, что java взвешивает стоимость любого обратного разрыва (насколько это вероятно и что происходит с кодом, который его сломал? Если он молча все еще компилируется и запускается, но делает что-то не так, это ужасно, если это тривиальное обновление, которое скрипт рефакторинга может автоматически применять каждый раз, это здорово - а затем смешайте шансы, что любая кодовая база наткнется на него, и у вас есть идея «затраты») по сравнению с выгодой от этого.
Затраты здесь очень незначительные. Крайне маловероятно, что какая-либо кодовая база сломается. Однако, если вы действительно хотите предложить эту функцию, было бы очень полезно провести некоторое исследование и попытаться придумать любую библиотеку (или, если вы не можете, посмотрите на 100 лучших списков, о которых пишут в блогах разные люди, анализируя, например, github java-проекты в качестве исходного материала), чтобы просмотреть кучу, чтобы попытаться увидеть, произойдет ли то, что произошло с .isEmpty
, с этими методами.
Но есть и плохие новости: маловероятно, что предложение Java-функции будет успешным. С некоторой точки зрения, как автор проекта Lombok, кто-то, кто провел много сотен часов, читая списки рассылки, такие как lambda-dev, который внес большую часть фактического синтаксиса лямбда и концептуальной основы, и провел беседы с несколькими архитекторами языка Java в некоторое время (в основном на конференциях по java) я отправил предложение, которое включало полный патч для самой java и все необходимые обновления, необходимые для JLS, которые вообще не нарушали обратную совместимость, и это никогда не получалось. Даже не так много, как JEP.
В прошлый раз, когда я разговаривал с инженером Oracle, они обещали, что теперь дела обстоят немного лучше, но это не особенно далеко: я не знаю ни одной функции Java поблизости или на горизонте, которая была бы получена от постороннего, который был отправлен прямо в JEP и приблизился к обозримому горизонту возможностей Java за последние 10 лет. Время от времени кто-то (обычно Джо Дарси или Алекс Бакли) запускает проект, чтобы «добавить кучу небольших удобных языковых изменений», например Project Coin (это было 11 лет назад, уф). Второй подход к этому — Project Amber, который, как мне кажется, должен быть более непрерывным. проект против монеты, у которой был определенный короткий промежуток времени.
Маршрут, чтобы получить это в java, по-видимому, будет проходить через янтарь.
person
rzwitserloot
schedule
24.01.2021