Почему реализация исходного кода Java для Android отличается от обычной реализации Java для тех же классов? - PullRequest
7 голосов
/ 17 октября 2019

Я решил начать кодирование для Android. Перед принятием решения я потратил много времени на улучшение своих навыков Java, надеясь, что это поможет мне и в разработке под Android.

Сегодня, после открытия некоторых классов (например, HashMap), я увидел, что реализация Androidотличается от «обычной» реализации.

Может кто-нибудь объяснить мне, почему классы, не связанные с GUI и сенсорным интерфейсом, должны реализовываться по-другому в Android? Почему бы не использовать тот же класс, который уже существует?

Я искал ответ, но не нашел его. Если этот вопрос уже был задан, я буду рад получить ссылку на него и заблокировать сообщение.

Ответы [ 2 ]

3 голосов
/ 17 октября 2019

Все дело в авторском праве, лицензировании и попытках большой компании защитить свой «газон».

Основой является то, что Java изначально была собственной кодовой базой, разработанной Sun Microsystems. Исходный код библиотеки классов Java, который был предоставлен разработчикам, был защищен проприетарной лицензией.

В 2007 году OpenJDK 6 был выпущен как открытый исходный код. Google посмотрел на OpenJDK и также договорился с Sun о лицензировании, но они решили, что им лучше переопределить чистую комнату на основе опубликованной спецификации языка Java и Java SE javadocs. Среди прочего, это позволило Google по-новому взглянуть на структуру пользовательского интерфейса и другие API, которые имеют решающее значение для мобильных платформ. Конец был результатом, который значительно превзошел предложение Sun ME от Java.

Но отношения между Sun и Google все еще были теплыми.

Затем Oracle объединилась с Sun, и произошла смена корпоративной культуры. Между Oracle и Google произошел крупный судебный процесс, который ограничил все шансы значительного сотрудничества между Oracle и Google в экосистеме Java.

Для получения дополнительной информации прочитайте следующие статьи Википедии:

0 голосов
/ 17 октября 2019

Различные SDK (даже от одного и того же издателя) могут иметь разные реализации классов, однако поведение в большинстве случаев для стандартных классов должно быть одинаковым. Много лет назад различия были еще больше.

...