Java에서 더 이상 사용되지 않는 가져 오기 경고 표시 안 함


111

Java에서 더 이상 사용되지 않는 클래스를 가져 오는 경우 :

import SomeDeprecatedClass;

다음 경고가 표시됩니다. The type SomeDeprecatedClass is deprecated

이 경고를 억제하는 방법이 있습니까?


4
예, 이상적 일 수 있지만이 경우에는 최근에 사용되지 않는 API의 일부를 사용하는 Hadoop 용 라이브러리를 사용하고 있으므로이 라이브러리를 사용하려는 경우 선택의 여지가 없습니다. 또한 이것은 학교 프로젝트를위한 것이며 유지 관리가 필요한 것은 아닙니다.
Ed Mazur

답변:


129

클래스 또는 메소드에이 주석을 사용하십시오.

@SuppressWarnings( "deprecation" )

29
수입품과 함께 작동합니까? 메서드 등에 대한 주석을 사용했지만 가져 오기에서 인식되지 않는 것 같습니다.
Ed Mazur

2
클래스 수준에서 주석을 사용하면 가져 오기도 포함되어야합니다. 적어도 Eclipse (예 : Rational Application Developer) 내에서이 작업을 수행하지만 명령 줄 컴파일 중에 확실하지 않습니다.
craigforster 2009

20
명령 줄 "javac"또는 ant의 <javac> 작업에서는 작동하지 않는 것 같습니다. -Xlint : -deprecation 플래그도 마찬가지입니다. javac 버그처럼 보입니다.
Archie 2011

1
지원 중단이 정적 필드 및 로컬 SuppressWarnings의 일부인 경우 작동하지 않습니다. 정규화 된 클래스 이름이 여기에서 더 나은 접근 방식 인 것 같습니다.
mheinzerling

16
질문은 "import"문에 관한 것이고 수정은 Eclipse / Intellij에서만 작동하므로 (댓글에 따르면 그렇게 보임) 답변이 맨 위에 있으면 안됩니다.하지만 궁극적 인 진실의 근원은 javac입니다. 작동하지 않습니다. 이 답변은 정말 질문에 대한 답 : stackoverflow.com/a/20909204/2032701
루슬란

179

경고를 피하려면 : 클래스를 가져 오지 마십시오.

대신 정규화 된 클래스 이름을 사용하십시오.

가능한 한 적은 위치에서 사용하십시오.


15
+1 이것이 허용되는 답변이어야합니다. 전체 클래스에 대한 사용 중단을 억제하지 않는 이점이 있습니다.
k_g

11
이것은 더 나은 대답입니다 @SuppressWarnings. 클래스 수준에서 수입품을 다루지 않습니다
Alex

7
이것은 최종적으로 수정 된 Java 9까지 가장 좋은 답변입니다. bugs.openjdk.java.net/browse/JDK-8032211
Christopher

14

해킹으로 가져올 수 없으며 코드 내에서 정규화 된 이름을 사용할 수 없습니다.

javac -Xlint : -deprecation을 시도해도 문제가 해결되는지 확실하지 않습니다.


9

가져 오기를 다음과 같이 변경하여이 문제를 해결했습니다.

import package.*

그런 다음 사용되지 않는 클래스를 사용한 메서드에 주석을 추가합니다.@SuppressWarnings("deprecation")


전체 패키지에서 모든 것을 가져 오지 마십시오. 성능에 영향을 미칩니다. 불필요한 컴파일러가 모든 클래스를로드하면 심각한 성능 문제가 발생합니다. 항상 사용하지 않는 클래스가 가져 오기에 표시되지 않도록하십시오.
Arundev 2016

1
여기에서 백과 사전을 예로 사용합니다 (예, 나도 데이트했습니다). 오랑우탄에 대한 정보를 찾고 있다면 'O'책을 집거나 모든 책을 집으십니까?
Ascalonian

@Arundev, 분명히 말하면 컴파일이 완료되는 데 더 오래 걸릴 수 있지만 런타임에는 실행 성능에 영향을 미치지 않습니다.
Paulo

@Paulo-그것이 사용되지 않더라도 가져온 클래스의 가용성을 확인하려는 것입니다. 따라서 사용하지 않는 수입품이 많으면 항상 제거하는 것이 좋습니다.
Arundev

7

더 이상 사용되지 않는 메소드 (예 : java.sql.ResultSet의 getUnicodeStream (String columnLabel))를 사용하여 인터페이스를 재정의 / 구현한다고 가정하면 @SuppressWarnings ( "deprecation") 주석을 사용하는 것만으로는 지원 중단 경고가 제거되지 않습니다. , @Deprecated 주석으로 동일한 새 메서드에 주석을 추가하지 않는 한. 그렇지 않으면 인터페이스 설명을 재정 의하여 메서드를 "사용 중지"할 수 있기 때문에 이것은 논리적입니다.


"@SuppressWarnings"및 "@Deprecated"의 이러한 조합은 자체 메서드 내에서 사용되지 않는 메서드를 호출하는데도 작동합니다.
Swav

1
나는 그 설명을 오랫동안 찾고 있었다. 감사합니다!
Jabari Dash

2

당신이 사용할 수있는:

javac FileName.java -Xlint : -deprecation

그러나 그러면 경고가 표시되고 지원 중단을 유발하거나 지원 중단 된 API를 사용하는 코드 부분도 알려줍니다. 이제 이러한 경고와 함께 코드를 실행하거나 코드를 적절하게 변경할 수 있습니다.

제 경우 someListItem.addItem("red color")에는 컴파일러가 someListItem.add("red color");.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.