Отключить предупреждение об устаревшем импорте в Java


113

В Java, если вы импортируете устаревший класс:

import SomeDeprecatedClass;

Вы получаете это предупреждение: The type SomeDeprecatedClass is deprecated

Есть ли способ подавить это предупреждение?


4
Да, это было бы идеально, но в этом случае я использую библиотеку для Hadoop, которая использует часть своего API, который недавно был объявлен устаревшим, поэтому у меня действительно нет выбора, хочу ли я использовать эту библиотеку. К тому же это просто школьный проект, а не то, что нужно будет поддерживать.
Эд Мазур,

Ответы:


129

Используйте эту аннотацию в своем классе или методе:

@SuppressWarnings( "deprecation" )

29
Это работает с импортом? Я использовал эту аннотацию для методов и тому подобного, но, похоже, это не распознается при импорте.
Эд Мазур,

2
Использование аннотации на уровне класса также должно охватывать импорт. Он делает это, по крайней мере, в Eclipse (ну, Rational Application Developer) для меня, но я не уверен, во время компиляции из командной строки.
Craigforster

20
Похоже, это не работает с задачей командной строки "javac" или ant <javac>. Также нет флага -Xlint: -deprecation. Похоже на ошибку javac.
Archie

1
Не работает, если устаревание является частью статического поля и локального SuppressWarnings. Полное имя класса кажется здесь лучшим подходом.
mheinzerling

16
Ответ не должен быть наверху, так как вопрос касается оператора "import", и исправление работает только для Eclipse / Intellij (так кажется, согласно комментариям), но окончательным источником истины является javac, для которого исправление не работает. Этот ответ действительно отвечает на вопрос: stackoverflow.com/a/20909204/2032701
Руслан

180

Чтобы избежать предупреждения: не импортируйте класс

вместо этого используйте полное имя класса

и используйте его в как можно меньшем количестве мест.


15
+1 Это должен быть принятый ответ. Его преимущество заключается в том, что он не подавляет устаревание для всего класса.
k_g

11
Это лучший ответ, @SuppressWarningsна уровне класса импорт не распространяется,
Alex

7
Это лучший ответ до Java 9, где он наконец-то исправлен: bugs.openjdk.java.net/browse/JDK-8032211
Кристофер

14

В качестве взлома вы не можете выполнить импорт и использовать полное имя внутри кода.

Вы также можете попробовать javac -Xlint: -deprecation, не уверен, что это решит эту проблему.


9

Я решил это, изменив импорт на:

import package.*

затем аннотируя метод, который использовал устаревшие классы, с помощью@SuppressWarnings("deprecation")


Не импортируйте все из всего пакета. Это повлияет на производительность. Ненужный компилятор загрузит все классы, что приведет к серьезным проблемам с производительностью. Всегда используйте то, что неиспользуемые классы отсутствуют в вашем импорте.
Arundev

1
Используя энциклопедию в качестве примера здесь (да, я датировал себя) - если вы ищете информацию об Орангутанге, вы просто берете книгу с буквой O или все книги?
Ascalonian

@Arundev, чтобы было ясно, вы говорите, что компиляция может занять больше времени, но во время выполнения это не повлияет на производительность выполнения, верно?
Пауло,

@Paulo - вот что я пытаюсь сказать, он будет проверять наличие импортированных классов, даже если он не используется. Так что, если у вас много неиспользуемого импорта, всегда лучше его удалить.
Арундев

7

Предположим, что вы переопределяете / реализуете интерфейс с помощью устаревшего метода (например, getUnicodeStream (String columnLabel) в java.sql.ResultSet), тогда вы не избавитесь от предупреждений об устаревании, просто используя аннотацию @SuppressWarnings («устаревание»). , если вы также не аннотируете тот же новый метод с помощью аннотации @Deprecated. Это логично, потому что в противном случае вы могли бы «не использовать» метод, просто переопределив его описание интерфейса.


Эта комбинация "@SuppressWarnings" и "@Deprecated" также работает для вызова устаревших методов внутри вашего собственного метода.
Swav

1
Я так долго искал это объяснение. Спасибо!
Джабари Даш

2

ты можешь использовать:

javac FileName.java -Xlint: -deprecation

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

В моем случае я использовал, someListItem.addItem("red color")тогда как компилятор хотел, чтобы я использовал someListItem.add("red color");.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.