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

113

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

import SomeDeprecatedClass;

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

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

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

Ответы:

129

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

@SuppressWarnings( "deprecation" )
Craigforster
источник
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");.

Амит
источник