Pomiń przestarzałe ostrzeżenie o importowaniu w Javie

112

W Javie, jeśli importujesz przestarzałą klasę:

import SomeDeprecatedClass;

Otrzymujesz to ostrzeżenie: The type SomeDeprecatedClass is deprecated

Czy istnieje sposób na zniesienie tego ostrzeżenia?

Ed Mazur
źródło
4
Tak, to byłoby idealne, ale w tym przypadku używam biblioteki dla Hadoop, która korzysta z części swojego interfejsu API, która została niedawno wycofana, więc nie mam wyboru, czy chcę używać tej biblioteki. Poza tym dotyczy to tylko projektu szkolnego, a nie niczego, co będzie wymagało utrzymania.
Ed Mazur,

Odpowiedzi:

129

Użyj tej adnotacji w swojej klasie lub metodzie:

@SuppressWarnings( "deprecation" )
craigforster
źródło
29
Czy to działa w przypadku importu? Użyłem tej adnotacji w metodach i tym podobnych, ale nie wydaje się, aby była rozpoznawana w przypadku importu.
Ed Mazur,
2
Korzystanie z adnotacji na poziomie klasy powinno również obejmować import. Robi to przynajmniej w Eclipse (dobrze, Rational Application Developer) dla mnie, ale nie jestem pewien co do kompilacji w wierszu poleceń.
craigforster
20
Wydaje się, że nie działa z wierszem poleceń „javac” lub zadaniem programu Ant <javac>. Ani też flaga -Xlint: -deprecation. Wygląda na błąd w Javac.
Archie,
1
Nie działa, jeśli wycofanie jest częścią pola statycznego i lokalnego SuppressWarnings. W pełni kwalifikowana nazwa klasy wydaje się tutaj lepszym podejściem.
mheinzerling
16
Odpowiedź nie powinna być na górze, ponieważ pytanie dotyczy instrukcji "import", a poprawka działa tylko dla Eclipse / Intellij (wydaje się, że tak jest zgodnie z komentarzami), ale ostatecznym źródłem prawdy jest javac, dla którego poprawka nie działa. Ta odpowiedź naprawdę odpowiada na pytanie: stackoverflow.com/a/20909204/2032701
Ruslan
179

Aby uniknąć ostrzeżenia: nie importuj klasy

zamiast tego użyj w pełni kwalifikowanej nazwy klasy

i używaj go w jak najmniejszej liczbie lokalizacji.

Kasper van den Berg
źródło
15
+1 To powinna być zaakceptowana odpowiedź. Ma tę zaletę, że nie blokuje przestarzałych wartości w całej klasie.
k_g
11
To jest lepsza odpowiedź, @SuppressWarningsna poziomie zajęć nie obejmuje importu
Alex
7
To najlepsza odpowiedź do Java 9, gdzie ostatecznie została naprawiona: bugs.openjdk.java.net/browse/JDK-8032211
Christopher
14

Jako hack nie możesz importować i używać w pełni kwalifikowanej nazwy w kodzie.

Możesz także spróbować javac -Xlint: -deprecation, nie jesteś pewien, czy to rozwiąże ten problem.

TofuBeer
źródło
9

Rozwiązałem to, zmieniając import na:

import package.*

następnie dodając adnotacje do metody, która używała przestarzałych klas@SuppressWarnings("deprecation")

Tim
źródło
Nie importuj wszystkiego z całego pakietu. Wpłynie to na wydajność. Niepotrzebny kompilator załaduje wszystkie klasy, co spowoduje poważny problem z wydajnością. Zawsze używaj tego, że nieużywane klasy nie są obecne w twoim imporcie.
Arundev,
1
Na przykładzie encyklopedii (tak, umawiałem się z sobą) - jeśli szukasz informacji o orangutanie, czy po prostu chwytasz książkę „O”, czy wszystkie książki?
Ascalonian
@Arundev, żeby było jasne, mówisz, że kompilacja może zająć więcej czasu, ale w czasie wykonywania nie będzie to miało żadnego wpływu na wydajność wykonania, prawda?
Paulo
@Paulo - to właśnie próbuję powiedzieć, sprawdzi dostępność zaimportowanych klas, nawet jeśli nie są używane. Więc jeśli masz dużo nieużywanych importów, zawsze lepiej to usunąć.
Arundev
7

Załóżmy, że zastępujesz / implementujesz interfejs za pomocą przestarzałej metody (takiej jak getUnicodeStream (String columnLabel) w java.sql.ResultSet), a następnie nie pozbędziesz się ostrzeżeń o wycofaniu, używając tylko adnotacji @SuppressWarnings („deprecation”) , chyba że dodasz również adnotację do tej samej nowej metody za pomocą adnotacji @Deprecated. Jest to logiczne, ponieważ w przeciwnym razie można by „cofnąć uznanie” metody, po prostu nadpisując jej opis interfejsu.

Per-Åke Minborg
źródło
Ta kombinacja „@SuppressWarnings” i „@Deprecated” działa również w przypadku wywoływania przestarzałych metod wewnątrz własnej metody.
Swav
1
Tak długo szukałem tego wyjaśnienia. Dziękuję Ci!
Jabari Dash
2

możesz użyć:

javac nazwa_pliku.java -Xlint: -deprecation

Ale wtedy pojawi się ostrzeżenie, a także poinformuje Cię o części kodu, która powoduje wycofanie lub używa wycofanego interfejsu API. Teraz albo możesz uruchomić kod z tymi ostrzeżeniami, albo wprowadzić odpowiednie zmiany w kodzie.

W moim przypadku używałem, someListItem.addItem("red color")podczas gdy kompilator chciał, żebym użył someListItem.add("red color");.

Amit
źródło