Почему в стандартном API Java нет общего языка? - PullRequest
5 голосов
/ 29 января 2011

Кажется, что у каждого Java-проекта, к которому я присоединяюсь или начинаю, всегда есть commons-lang как зависимость - и на то есть веская причина.У commons-lang есть тонны классов и служебных методов, которые довольно стандартны для большинства стандартных API на других языках.Почему Sun / Oracle / JCP не приняли некоторые вещи из общего достояния в стандартном API?

Ответы [ 2 ]

5 голосов
/ 29 января 2011

Как уже указывалось, некоторые функции API Commons превратили его в Java, часто реализуя (IMHO) лучше, чем они были изначально в библиотеке commons. Enums - классический пример.

С точки зрения того, почему они не принимают больше общего-ланга, у некоторых классов есть элемент путаницы. Возьмите, например, StrBuilder, он более мощный, чем Java StringBuilder, и он расширяемый. Но я не уверен, что был бы за добавление такого класса в базовый API Java, StringBuilder / StringBuffer достаточно хороши для большинства целей, и наличие там другого действительно немного сбивает с толку. Они не могли по-настоящему изменить StringBuilder таким образом, чтобы он учитывал все изменения, потому что это могло сломать существующий код. Даже если они добавят один, что, когда кто-то еще пришел с другой, более мощной версией? StrBuilder2? Вскоре все становится большим беспорядком (некоторые утверждают, что ядро ​​API уже есть, не говоря уже о таких дополнениях).

И, как всегда, с этими вещами, главное - это , что должно быть включено из commons-lang. Некоторые люди, вероятно, хотели бы видеть добавленные классы MutableXXX, другие - классы XXXUtils, другие - пакет времени ... на самом деле не существует единого мнения.

Другая важная вещь заключается в том, что разработчики Java должны быть намного более осторожными в отношении основного API Java, чем разработчики Apache для commons-lang. Если в будущем выпуске дрянной дизайн в commons-lang будет заменен, старый может быть признан устаревшим и впоследствии удален (действительно, похоже, именно так и происходит). В основном Java API он должен остаться по причинам обратной совместимости, просто вызывая больше беспорядка.

Для чего это стоит, хотя я думаю, что больше функциональности в commons-lang, вероятно, следует включить. Я просто вижу причины, по крайней мере частично, почему это не так.

1 голос
/ 29 января 2011

Исторически Apache Commons реализовал некоторые функции, которые позже были представлены в Java 5, такие как перечисления и аннотации.Их реализация была достаточно различной, чтобы затруднить интеграцию.

...