Deprecated java что это
Перейти к содержимому

Deprecated java что это

  • автор:

Как используется @⁠Deprecated?

Этой аннотацией помечают код, который устарел и не должен быть более использован. Классы, которые используют или переопределяют @Deprecated элементы, будут компилироваться с warning-ом.

Имеет retention RUNTIME , что значит, что фреймворки могут динамически проверять наличие аннотации на элементе с помощью Reflection API.

Начиная с Java 9 у этой аннотации появились опциональные параметры – строка since и булево значение forRemoval . В since указывается версия вашего приложения, начиная с которой элемент считается устаревшим. Значение true в forRemoval предупреждает, что со следующей мажорной версии этот элемент будет удален. Такое нововведение связано с изменением политики устаревания – с Java 9 и устаревшие элементы самой JDK тоже могут удаляться в будущих версиях.

Обычно, когда элемент помечают устаревшим, причины устаревания и дальнейшие рекомендации указывают в его Javadoc-документации под тегом @deprecated .

Deprecated Класс

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

Use IDeprecated interface instead

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

[Android.Runtime.Register("java/lang/Deprecated", DoNotGenerateAcw=true)] [System.Obsolete("Use IDeprecated interface instead")] public abstract class Deprecated : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.Annotation.IAnnotation
[] [] type Deprecated = class inherit Object interface IAnnotation interface IJavaObject interface IDisposable interface IJavaPeerable

Наследование
Deprecated
Реализации

Комментарии

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать. Элемент может быть нерекомендуем по любой из нескольких причин, например, его использование может привести к ошибкам; она может быть изменена несовместимо или удалена в следующей версии; она была заменена более новой, обычно предпочтительной альтернативой; или является устаревшим.

Компиляторы выдают предупреждения при использовании или переопределении нерекомендуемого программного элемента в нерекомендуемом коде. Использование заметки @Deprecated для объявления локальной переменной, объявления параметра или объявления пакета не влияет на предупреждения, выдаваемые компилятором.

Если модуль является устаревшим, использование этого модуля в requires предложениях , но не в exports предложениях или opens вызывает предупреждение. Нерекомендуемый <>модуль не<> вызывает предупреждения об использовании типов в модуле.

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

Этот тип заметки имеет элемент forRemoval с логическим значением . Значение true указывает на намерение удалить элемент программы с заметками в будущей версии. Значение false указывает, что использование элемента программы с заметками не рекомендуется, но на момент добавления заметки к элементу программы не было конкретного намерения удалить его.

Добавлено в версии 1.5.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

Конструкторы

Является устаревшей.

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Является устаревшей.

Возвращает класс среды выполнения данного объекта Object .

Является устаревшей.

Дескриптор базового экземпляра Android.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Является устаревшей.

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Является устаревшей.

Возвращает интерфейс заметки для этой заметки.

Является устаревшей.

Создает и возвращает копию этого объекта.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Указывает, равен ли какой-то другой объект этому объекту.

Является устаревшей.

Возвращает значение хэш-кода для объекта.

Является устаревшей.

Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект .

Является устаревшей.

Пробуждение одного потока, ожидающего на мониторе этого объекта.

Является устаревшей.

Активирует все потоки, ожидающие на мониторе этого объекта.

Является устаревшей.
Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Возвращает строковое представление объекта.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за или .

Является устаревшей.

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за em>, <>прерывания < или>em, либо до истечения определенного количества реального времени.

Является устаревшей.

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за em>, <>прерывания < или>em, либо до истечения определенного количества реального времени.

Явные реализации интерфейса

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Методы расширения

Является устаревшей.

Выполняет преобразование типа, проверенное средой выполнения Android.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Является устаревшей.

Программный элемент с заметками @Deprecated — это элемент, который программистам не рекомендуется использовать.

Чем заменять deprecated методы

введите сюда описание изображения

В студии это выглядит так: Вопрос: чем заменять такие методы, и где можно найти актуальные методы которые могут заменить функционал deprecated-метода.

Отслеживать
задан 25 фев 2016 в 10:07
Kirill Stoianov Kirill Stoianov
6,148 6 6 золотых знаков 30 30 серебряных знаков 66 66 бронзовых знаков
25 фев 2016 в 10:13

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Найти актуальные методы всегда можно в документации. Конкретно по getDrawable : http://developer.android.com/intl/ru/reference/android/content/res/Resources.html#getDrawable(int) deprecated с API 22.

Указывают, что заменить можно на Context.getDrawable(int) или getDrawable(int, Theme) , передав тему.

Либо использовать библиотеки совместимости, тогда так: ContextCompat.getDrawable(context, R.drawable.***) , тогда не нужны проверки.

Отслеживать
ответ дан 25 фев 2016 в 10:14
15.8k 1 1 золотой знак 18 18 серебряных знаков 35 35 бронзовых знаков

Не забудьте добавить проверку на доступность данного метода в новом API. Например, если новый метод есть только в API 21, то на старых версиях ОС у вас будут ошибки и нужно добавить проверку вида:

if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) < //используем новый метод >else < //используем старый deprecated метод >

Отслеживать
15.8k 1 1 золотой знак 18 18 серебряных знаков 35 35 бронзовых знаков
ответ дан 25 фев 2016 в 10:30
5,707 19 19 серебряных знаков 30 30 бронзовых знаков
25 фев 2016 в 10:46

Дело в том что этот метод deprecated. Это значит, что в будущих версиях он будет исключен из SDK. Проверка внутри метода немного другое. В вашем случае нужно использовать этот метод если текущий номер API ниже 22 и новый метод, который в ответе выше если уровень API >= 22.

25 фев 2016 в 10:49

я не уточнил, я говорю про метод ContextCompat.getDrawable(‌​) он не deprecated, и в нем внутри происходит проверка!

25 фев 2016 в 11:02
да, ContextCompat можно юзать без проверок. Это класс support library.
25 фев 2016 в 11:23

Идёте на Android developers в поиске вбиваете свой класс, у которого метод устарел, не забудьте предворительно указать версию API в списке пакетов, далее находите описание класса с его полями, методами и т.д., далее ищите свой метод в списке, в описании метода всегда написано, если он устарел, что лучше использовать вместо него, это касается не только методов, но и в целом любых deprecated.

Там в описании чётко написано, что делать.

Отслеживать
ответ дан 25 фев 2016 в 12:26
3,362 19 19 серебряных знаков 35 35 бронзовых знаков

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.17.3574

Введение в аннотации

J2SE содержит множество нововведений в самом языке Java, в том числе поддержка параметризуемых классов (generics) и улучшенного цикла for (enhanced for loop). В предыдущих статьях мы подробно рассказывали о параметризуемых классах и об улученном цикле for, а в этой статье мы рассмотрим аннотации, встроенные в J2SE 5.0.

Что же такое аннотации? Аннотации — они же JSR-175 (Meta-data) — позволяют связывать метаданные с программными элементами (такими как классы, интерфейсы и методы). Они могут служить дополнительными модификаторами без изменения основного кода для своих элементов.

Само введение метаданных в исходный код не является новым для J2SE 5.0. Вы можете добавить тег @deprecated в комментариях к методу в javadoc, и компилятор будет обрабатывать его как метаданные метода. Такая возможность появилась с выходом версии J2SE 1.0. Уже начальный релиз платформы был ориентирован на сокращение использования метода getenv() (хотя это было реализовано только в версии 1.1). Суть осталась той же, за исключением символа @ в синтаксисе. Изменилось только место — тег аннотации перешел в код, а не в комментарий. Преимущество в том, что аннотации являются способом поддержки программной модели объявлений.

Итак, первая аннотация, которая идет с J2SE 5.0: @Deprecated . Обратите внимание, что здесь заглавная буква D. @Deprecated функционально работает в коде также как и @deprecated в javadoc, связанный с классом или методом. С помощью флагов и тега @Deprecated вы сообщаете компьютеру предупредить пользователя, что используется тот или иной класс или метод.

Класс Main содержит метод deprecatedMethod() , у которого флагом является аннотация @Deprecated , а комментарием @deprecated :

public class Main <

/**
* @deprecated устарел. Используйте вместо него Use System.foobar().
*/

@Deprecated
public static void deprecatedMethod () System.out.println ( «Don’t call me» ) ;
>
>

Компилируйте класс с аннотацией так же, как без нее:

> javac Main.java

Как и следовало ожидать, получился класс Main.class .

Если вы используете метод deprecated, то получите предупреждение при компиляции — такое же, как при использовании тега @deprecated в javadoc. Пример:

public class User <
public static void main ( String args []) <
Main.deprecatedMethod () ;
>
> > javac User.java

и вы увидите следующее предупреждение об использовании класса deprecated:

Note: User.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

User.java использует или заменяет deprecated API. Перекомпилируйте с -Xlint:deprecation, чтобы посмотреть детали. Добавление -Xlint в строку компиляции покажет, что именно не так:

> javac -Xlint:deprecation User.java

User.java: 3 : warning: [ deprecation ] deprecatedMethod () in
Main has been deprecated
Main.deprecatedMethod () ;
^
1 warning

Замена комментария @deprecated на аннотацию @Deprecated не принесет ничего существенно нового в систему. Это слега изменяет способ, но делает все то же самое. А вот следующие две аннотации @Override и @SuppressWarnings действительно меняют функциональность платформы.

Аннотация @Override может использоваться вместе с объявлением метода. После того как вы ввели имя, можете добавить аннотацию @Override для установки значение флага функции, чтобы переписать метод суперкласса. Зачем так делать? Чтобы найти ошибку раньше. Сколько раз вы собирались переписать метод, но то в названии метода была ошибка, то определены неправильные аргументы, а то неверный тип возвращаемого значения? Иными словами, сколько раз вам приходилось создавать новый метод вместо того, чтобы переписать уже существующий? Используя @Override , вы найдете ошибку в текущем классе намного раньше:

public class Overrode <
@Override
public int hashcode () <
return 0 ;
>

@Override
public boolean equals ( Object o ) return true ;
>
>

Здесь ошибка в том, что название метода должно быть hashCode , а не hashcode . Предполагается, что объявление метода находится где-то в описании класса. Если не использовать первую аннотацию @Override , сколько у вас займет времени, чтобы обнаружить, что ваш метод hashCode (с заглваной буквой) не вызывается, и вы получаете некоторый результат по умолчанию от родительского класса Object . Благодаря аннотации @Override , компиляция класса выдаст ошибку, сообщающую вам о проблеме (метод не переписывается из своего суперкласса):

Overrode.java: 2 : method does not override a method from its
superclass
@Override
^
1 error

Чем скорее вы найдете ошибку такого происхождения, время на ее исправление сильно сокращается. Обратите внимание, что метод hashCode никогда не возвращает константу. Более подробное описание использования hashCode и equals() вы найдете в 8 пункте в книге Джошуа Блош «Путеводитель по эффективному программированию на Java».

Последняя из трех новых аннотаций в J2SE 5.0 — @SuppressWarnings — самая интересная. Она сообщает компилятору не предупреждать вас, о чем он обычно предупреждает. Предупреждения относятся к разным категориям, и вы можете сообщить аннотации, какие категории вас интересуют. Компилятор javac определяет семь свойств для вывода предупреждений: все, deprecation, непроверенные, проход при невыполнении условия, неверные пути, последовательные и конечные. (В спецификации языка определены только два из этих типов: deprecation и непроверенные.)

В целях демонстрации, посмотрим на блокировку опции «проход при невыполненных условиях». Начнем со следующего класса. В этом классе пропущено break в каждом случае switch :

public class Fall <
public static void main ( String args []) <
int i = args.length;
switch ( i ) <
case 0 :
System.out.println ( «0» ) ;
case 1 :
System.out.println ( «1» ) ;
case 2 :
System.out.println ( «2» ) ;
case 3 :
System.out.println ( «3» ) ;
default :
System.out.println ( «Default» ) ;

Скомпилируйте класс с помощью javac. Вы увидите, что просто создается файл .class без всяких предупреждений:

javac Fall.java

Если вы хотите, чтобы компилятор предупреждал вас о невыполнении условий switch (т.е. что пропущено одно или более утверждений break ), скомпилируйте с опцией Xlint:fallthrough :

javac -Xlint:fallthrough Fall.java

Вы увидите следующие предупреждения:

Fall.java:6: warning: [fallthrough] possible fall-through into case case 1: System.out.println("1"); ^ Fall.java:7: warning: [fallthrough] possible fall-through into case case 2: System.out.println("2"); ^ Fall.java:8: warning: [fallthrough] possible fall-through into case case 3: System.out.println("3"); ^ Fall.java:9: warning: [fallthrough] possible fall-through into case default : System.out.println("Default"); ^ 4 warnings

Что делать, если вы не придаете значения тому, что в каждом случае switch пропускается break ? Вот где вам пригодится аннотация @SuppressWarnings . Вставьте эту строчку перед объявлением метода main() :

@SuppressWarnings ( «fallthrough» )

Скомпилируйте с опцией -Xlint:fallthrough :

javac -Xlint:fallthrough Fall.java

и получите файл .class без единого предупреждения.

Аннотация @SuppressWarnings может использоваться для подавления других предупреждений, например, когда вы используете коллекции, не указывая типа данных элементов коллекции. Не стоит использовать аннотацию @SuppressWarnings , чтобы просто избежать предупреждений компилятора. Применяйте это там, где нельзя избежать предупреждений, например, при использовании библиотеки, которая не была создана вместе с параметризуемыми классами (generics).

Это что касается встраиваемых аннотаций. Маленькое дополнение: аннотации (со своими аргументами) обычно определяются отдельной строкой сами по себе.

Определяя свои собственные аннотации, вы можете сделать намного больше, чем просто использовать аннотации, введенные в J2SE 5.0. Здесь вы узнаете, как создавать свои аннотации.

A может Вас также заинтересует что-нибудь из этого:
  1. Java и базы данных → Hibernate: Пользовательские типы в hibernate. Разбираемся с UDT
  2. Java Standard Edition → Аннотации в Java (java annotation types). Пример 1
  3. Java Standard Edition → Java аннотации пример 1
  4. Java и базы данных → Hibernate: Пользовательские типы в hibernate. Разбираемся с компонентами
  5. Разное → Теория и практика Java: Динамическая компиляция и измерение производительности
  6. Java сниппеты → Методы для работы с переменным количеством аргументов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *