Чего меня раздражает в Java.
1. Нет замыканий. И нет изящного способа их воплотить. Для имитации замыкания нужно создавать интерфейс, а потом делать его реализации. Хотя бы в виде безымянных классов. Выглядит это не ахти и требует явно лишних усилий.
2. Массивы и контейнеры — не одно и то же. foreach действует одинаково и для того и для другого, но вот создавать их почему-то надо разными способами. И разными же способами с ними взаимодействовать. Особенно печально это в случае с отражениями — тут приходится всё время делать отдельные ветки для массивов и коллекций.
3. Примитивный тип и его объектная обёртка на уровне отражений не целиком взаимозаменяемы. Опять же — отдельные ветки, да ещё и временами приведение типов.
4. Нет возможности получить явную ссылку на метод в том же виде, в котором её можно получить на class (String.class, например). Из-за этого на метод приходится ссылаться исключительно по строке, что компилятор проверить не в состоянии.
5. Дженерик в рантайме не может сообщить про свои параметры. Из-за этого приходится как-то там сообщать, что конкретно должно храниться в полях-дженериках.
6. Многие операции с дженериками сильно избыточны по синтаксису. Из-за это зачастую проще вообще не указывать параметры дженерика — чтобы не надо было их указывать в десяти местах.
7. Дженерик не может быть параметризован примитивными типами. С авто-свёрткой всё нормально, но когда дело доходит до отражений — всё тот же пинцет.
Сцуко!!!
Примечание для студентов: совет «смени язык программирования на XXX» кажется очень умным только вам. То есть, тем, кто не пишет никаких крупных проектов и не работает в команде. Да, пацаны, зато у вас есть возможность писать ваш любимый «здравствуй, мир!» на всех существующих языках и выбирать среди них лучший по критерию «насколько просто на нём написать здравствуймир».
← Ctrl ← Alt
Ctrl → Alt →
← Ctrl ← Alt
Ctrl → Alt →