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?


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" )

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.


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.


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")


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.


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");.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.