Почему происходит устаревание?

По какой причине команда разработчиков Android отказывается от некоторых системных методов, я знаю, что есть некоторые методы, которые заменены другими методами, которые более удобны и полезны, но некоторые другие даже не заменены другими методами или просто заменены одним обобщенным большим методом, который не будет полезен при попытке более конкретно разобраться с каким-то элементом, например, с некоторыми методами из класса Date:

Date mDate = new Date();
mDate.getDate();            //Deprecated
mDate.getDay();             //Deprecated
mDate.getHours();           //Deprecated
mDate.getMinutes();         //Deprecated
mDate.getMonth();           //Deprecated
mDate.getSeconds();         //Deprecated
mDate.getYear();            //Deprecated
mDate.getTimezoneOffset();  //Deprecated

и единственный, который существует сейчас, это:

mDate.getTime(); // gives the whole Time & Date as a `long` Value in milliseconds

теперь, когда я получаю Date Object и пытаюсь получить Год , я должен:

  1. Объявите новый Calendar Object.
  2. делает его равным экземпляру класса Calendar Class.
  3. устанавливает время этого объекта календаря на дату, которую я получил.
  4. извлеките необходимые атрибуты из этого объекта календаря.

и что, если этот объект данных содержит только дату со временем, равным нулю. теперь мне нужно найти обходной путь, чтобы сохранить время календаря перед применением к нему даты, а затем снова сбросить сохраненное время после применения к нему даты.

другой пример, найденный здесь, который иллюстрирует, что весь интерфейс PictureListener устарел и нет никаких признаков того, что , во всяком случае, предполагается заменить его.

третий пример, когда вы хотите получить ширину и высоту экрана, это было напрямую:

int windowWidth, windowHeight;
windowWidth = getWindowManager().getDefaultDisplay().getWidth(); // Deprecated
windowHeight = getWindowManager().getDefaultDisplay().getHeight(); // Deprecated

но сейчас:

int windowWidth, windowHeight;
DisplayMetrics metrices = new DisplayMetrics();
mContext.getWindowManager().getDefaultDisplay().getMetrics(metrices);
windowWidth = metrices.widthPixels;
windowHeight = metrices.heightPixels;

person Muhammed Refaat    schedule 28.10.2014    source источник
comment
@Funkystein лоооол, в этом есть смысл   -  person Muhammed Refaat    schedule 28.10.2014
comment
Я верю этому. Вчера мы что-то делали, сегодня мы узнали, что то же самое может быть достигнуто с помощью другого и эффективного подхода, поэтому я предпочитаю заменить его сегодня   -  person nobalG    schedule 28.10.2014
comment
Меня действительно раздражает, когда они осуждают что-то и заставляют использовать что-то другое. Мне понравился fill_parent, потому что он короче и проще, чем match_parent. Но теперь я должен использовать match_parentдействительно ненавижу предупреждения об устаревании - и да, я мог бы обмануть Lint, но не хочу). И этот пример - только верхушка айсберга...   -  person Phantômaxx    schedule 28.10.2014
comment
@nobalG серьезно задумался, но если другой подход не так эффективен, зачем идти к нему   -  person Muhammed Refaat    schedule 28.10.2014
comment
Разработчики языка Java спешили также предоставить базовые классы и не очень хорошо разработали класс Date. Например, он должен был быть неизменным; теперь вам придется сделать защитную копию (javapractices.com/topic/TopicAction .do?Id=15) при возврате из функции получения. Они обесценивают вещи, для которых у них есть новое понимание. Рекомендуется не использовать его, так как он может быть удален из языка в будущем. Всегда есть альтернативы, но, к сожалению, пометка как устаревшая не говорит вам, какая. Вам придется погуглить.   -  person Rob Meeuwisse    schedule 28.10.2014
comment
Нашел это забавным, но все же полностью согласен с тем спешить, на что указывает @RobMeeuwisse .. :)   -  person nobalG    schedule 28.10.2014
comment
@Funkystein, это правда, что-то связывает fill и match, зачем это менять? Какова польза для развития от изменения написания всего слова?   -  person Muhammed Refaat    schedule 28.10.2014
comment
@MuhammedRefaat Точно. Что лучше в match_parent? Ничего. Наоборот, он длиннее и нелогичен. Он действительно ведет себя так же, как fill_parent. Итак, почему они беспокоят нас?   -  person Phantômaxx    schedule 28.10.2014
comment
@Funkystein +1, за указание на это... (0_o)   -  person nobalG    schedule 28.10.2014
comment
@RobMeeuwisse, вы имеете в виду, что все устаревания не имеют ничего общего с командой разработчиков Android? и они пришли из Java Restrictions?   -  person Muhammed Refaat    schedule 28.10.2014
comment
@nobalG спасибо за хороший улов   -  person Muhammed Refaat    schedule 28.10.2014
comment
@MuhammedRefaat Не все. Как я уже говорил, устаревшие представления Android Views специфичны для Android.   -  person Phantômaxx    schedule 28.10.2014
comment
stackoverflow.com/ questions/2901262/ подробнее об устаревании даты. И поскольку каждый разработчик API допускает ошибки/изменения требований, это будет происходить снова и снова.   -  person zapl    schedule 28.10.2014
comment
@zapl спасибо, что указали нам на этот замечательный пост.   -  person Muhammed Refaat    schedule 28.10.2014


Ответы (2)


Упомянутые вами методы java.util.Date не устарели не командой Android, но устарели Sun в Java 1.1. Это просто пример наследия Java. Если вы считаете, что Calendar API невыносим, ​​я бы рассмотрел вместо этого использование Joda Time.

person mbukowicz    schedule 28.10.2014

Устаревание — это способ сообщить разработчикам, что есть лучший способ сделать что-то, и что они не должны больше использовать старый способ.

Разработчики фреймворка могут удалять устаревшие API, но, поскольку они не хотят беспокоить разработчиков, которые все еще используют эти API, вместо этого они объявляют их устаревшими. Вместо того, чтобы обвинять их, вы должны поблагодарить их за то, что они управляют изменениями таким образом.

person clemp6r    schedule 28.10.2014
comment
Я думаю, что это объясняет один случай устаревания, так как есть другие, которые не подчинились этому делу. - person Muhammed Refaat; 28.10.2014