Java 메소드를 선언하거나 더 이상 사용되지 않는 것으로 표시하는 방법은 무엇입니까?


284

더 이상 사용되지 않는 방법 중 하나를 "더 이상 사용하지 않음"으로 만들고 싶습니다.

그러나 여전히 API에 넣고 싶습니다. 나는 그 방법을 사용하는 사람에게 "경고"를 보여주고 싶다.

어떻게하면 되나요?


10
@Deprecrated가 옵션이 아닙니까?
templatetypedef

18
그것은, 그러나 나는 그것에 대해 몰랐습니다 ... 그게 내가 질문을하는 이유 :)
Pavel Janicek


4
의견은 답변의 장소가 아닙니다!
mattumotu

답변:


577

@Deprecated방법에 사용하십시오 . javadoc 필드를 명확히하는 것을 잊지 마십시오 :

/**
 * Does some thing in old style.
 *
 * @deprecated use {@link #new()} instead.  
 */
@Deprecated
public void old() {
// ...
}

2
외부 라이브러리를 어떻게 연결합니까? 예 : com.hello.api.PublicController # new
Faizan Kazi

@LinuxLars는 완전히 동의했습니다! Java 9는 지원 중단을 심각하게 시작하기 위해 몇 가지 속성을 추가했지만 reason기본값이 다른 속성 을 추가 ""해도 아무런 문제가 없었습니다
asgs

3
@deprecated댓글에 있는 메시지를 추가 할 수 있으면 좋겠습니다. @Deprecated(하나만 수정하면됩니다.)
U. Windl

88

@Deprecated주석과 @deprecatedJavaDoc 태그를 모두 사용하십시오 .

@deprecated의 JavaDoc 태그는 문서의 목적을 위해 사용됩니다.

@Deprecated주석은 방법은 사용되지 않는 것을 컴파일러에 지시합니다. 다음은 주제에 대한 Sun / Oracles 문서에서 말하는 내용입니다.

은 Using @Deprecated주석 모든 컴파일러 때 코드를 사용하는 프로그램 요소 경고를하는 클래스, 메소드, 또는 필드의 보장하지만를 더 이상 사용합니다. 반대로, @deprecatedSun 컴파일러는 현재 그렇게하지만 모든 컴파일러가 Javadoc 태그를 기반으로 항상 경고를 발행한다고 보장 할 수는 없습니다 . 다른 컴파일러는 이러한 경고를 발행하지 않을 수 있습니다. 따라서 @Deprecated어노테이션을 사용하여 경고를 생성하면 @deprecatedJavadoc 태그 에 의존하는 것보다 이식성이 뛰어납니다 .

API 폐기 방법 및시기 에서 전체 문서를 찾을 수 있습니다.


1
사실이 아닙니다. 모두 의 javadoc 및 주석 TELL 컴파일러 방법은 지원되지 않습니다
보헤미안

17
@Bohemian 사실 그것은 사실이 아닙니다. 주석은 Javadoc 사양이 아닌 Java 언어 사양 섹션 9.6.1.6 ( java.sun.com/docs/books/jls/third_edition/html/… )에 정의되어 있습니다. 주석은 언어의 일부입니다. 자체 Java 컴파일러를 작성하기로 결정한 경우 javadoc 태그를 무시할 수 있지만 주석을 인식해야합니다.
ShaMan-H_Fel

@ ShaMan-H_Fel javadoc 모델도 작동한다고 생각합니다. Java 5 이전의 유일한 선택 이었으므로 작동했습니다. @deprecatedjavadoc 태그를 사용 하여 메소드를 표시하면 (Java 4에서) 컴파일러는 메소드 (클래스, 필드)를 더 이상 사용되지 않는 것으로 표시하고 소스를 사용할 수없는 경우에도 IDE에 경고가 표시되었습니다.
Amir Pashazadeh

42

사소한 설명이 빠져 있기 때문에

@Deprecated이 방법으로 주석을 사용하십시오.

 /**
 * @param basePrice
 * 
 * @deprecated  reason this method is deprecated <br/>
 *              {will be removed in next version} <br/>
 *              use {@link #setPurchasePrice()} instead like this: 
 * 
 * 
 * <blockquote><pre>
 * getProduct().setPurchasePrice(200) 
 * </pre></blockquote>
 * 
 */
@Deprecated
public void setBaseprice(int basePrice) {
}

설명해야합니다 :

  1. 왜이 방법은 더 이상 권장되지 않습니다 . 그것을 사용할 때 어떤 문제가 발생합니다. 해당 사안에 대한 토론 링크를 제공하십시오. (가독성을 위해 줄을 분리해야 함<br/>
  2. 제거 될 때 . (이전 방식을 고수하기로 결정한 경우 사용자에게이 방법에 얼마나 의존 할 수 있는지 알려주세요)
  3. 솔루션을 제공 하거나 권장하는 방법에 대한 링크 {@link #setPurchasePrice()}

</br> 대신 <br/>이어야하지 않습니까?
argh1969

@ argh1969, 맞아! 그때부터 템플릿을 어디서 얻었는지 기억하지 마십시오. 그러나 두 버전이 모두 작동하는지 확인할 수 있습니다. 나는 표준에 찬성하여 편집하고 있지만.
azerafati

37

당신이 할 수있는 두 가지가 있습니다 :

  1. 추가 @Deprecated메소드에 주석을 하고
  2. @deprecated메소드의 javadoc에 태그 추가

당신은 둘 다해야합니다 !

이 주제에 대한 Java 설명서 인용 :

J2SE 5.0부터는 @Deprecated 주석을 사용하여 클래스, 메소드 또는 필드를 사용하지 않습니다. 또한 @deprecated Javadoc 태그를 사용하여 개발자에게 대신 사용할 것을 알려줄 수 있습니다.

주석을 사용하면 사용되지 않는 클래스, 메소드 또는 필드가 사용될 때 Java 컴파일러가 경고를 생성합니다. 더 이상 사용되지 않는 컴파일 단위가 더 이상 사용되지 않는 클래스, 메소드 또는 필드를 사용하는 경우 컴파일러는 더 이상 사용되지 않는 경고를 억제합니다. 이를 통해 경고를 생성하지 않고 레거시 API를 빌드 할 수 있습니다.

새 API 사용 방법을 설명하는 적절한 주석과 함께 Javadoc @deprecated 태그를 사용하는 것이 좋습니다. 이를 통해 개발자는 이전 API에서 새 API로 마이그레이션 가능한 마이그레이션 경로를 가질 수 있습니다



3

@Deprecated주석을 살펴보십시오 .

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