... но мне трудно поверить, что класс, являющийся частью дистрибутива ядра Java, все еще имеет проблемы после нескольких выпусков JDK.
В защиту Солнца они оказываются между камнем и наковальней:
Если они решат эти проблемы, они, несомненно, сломают десятки тысяч устаревших приложений, которые зависят от текущих API и их неидеального поведения. Если бы они сделали это, последствия от их платящей клиентской базы были бы огромными. И все больше предприятий застрянет, используя древние выпуски JDK.
Если они не решат проблему, они получат бесконечную критику от пуристов, которые считают, что каждая проблема должна быть решена, и чертовской совместимости.
По крайней мере, людям, которым нужен HTTP-клиент API, есть лучшая альтернатива ... если они захотят использовать его.
Вот причина, по которой @deprecated был изобретен.
Теоретически да ...
Однако на практике устаревание используется Oracle как сильный сигнал для программистов (и, что более важно, менеджеров), что им необходимо изменить свой код.
Это не гарантировано здесь. Давайте посмотрим на конкретные вопросы:
"HttpURLConnection
не может обрабатывать cookie-файлы" не является причиной для его отмены. Люди, которые уже создали приложения против HttpURLConnection
, уже сталкивались с этой проблемой. Для них переход на другой HTTP-класс клиента ненужный труд.
"HttpURLConnection
не поддерживает keep-alives" также не является причиной для осуждения. Большинству приложений не требуется keep-alives.
и т. Д.
Устаревание является тупым инструментом, и философия Sun / Oracle заключается в том, что его следует использовать только в тех случаях, когда API трудно использовать безопасно ; т. е. когда есть веское экономическое обоснование для разработчиков, тратящих время на переработку кода, и так далее.
Но не просто поверьте мне на слово. Посмотрите на случаи, когда Sun / Oracle имеет устаревшие методы и классы. Существует четкая закономерность, даже если есть исторические исключения.