Java : 감가 상각 된 멤버를 무시하는 파생 인터페이스에서 감가 상각 된 경고를 피하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1213362

문제

다음 단순화 된 인터페이스 상속 계층 구조를 고려하십시오.

// Starting point:
public interface Base {
    void Foo();
}

public interface Derived extends Base {
}

이동하기위한 것입니다 Foo .의 방법 Base 인터페이스 Derived 상호 작용:

// Desired end-point:
public interface Base {
}

public interface Derived extends Base {
    void Foo();
}

이 파괴 변화의 위상을 위해서는 Base 한동안 인터페이스.

이것은 메소드를 표시하여 달성 할 수 있습니다. Base 인터페이스로 @Deprecated:

// Intermediate state:
public interface Base {
    /**
     * @deprecated This method is deprecated as of release X. Derived.Foo should be used instead.
     */
    @Deprecated void Foo();
}

public interface Derived extends Base {
    void Foo(); 
}

이 코드를 컴파일하면 컴파일러 경고를받습니다. Derived:

감가 상각] 인터페이스베이스의 foo ()가 더 이상 사용되지 않았습니다.

이상하게도, 내가 제거하면 @deprecated 문서에서 Base (그러나 @deprecated를 남겨 두십시오)이 경고는 사라집니다.

이 경고를받는 것이 맞습니까? 그렇다면 어떻게해야합니까?


경고는 그것을 전달하는 것 같습니다 Derived.Foo "사용" Base.Foo (더 이상 사용되지 않음). 그러나 유일한 능력 Derived.Foo 더 이상 사용되지 않는 "사용"입니다 Base.Foo 그것을 무시하는 것입니다. 그것은 당신이 파생 된 방법에서 더 이상 사용되지 않은 인터페이스 방법을 무시할 수 없다고 말하는 것 같습니다.

이것이 사실이라면, 나는 장식해야합니다 Derived ~와 함께 @SuppressWarnings("deprecation") 경고를 억제하려면?

도움이 되었습니까?

해결책

나는 당신의 요구 사항이 유효하다고 생각합니다. 의심 할 여지없이 감가 상승 방법을 무시하는 것이 올바른 방법이라는 것은 의심의 여지가 없습니다.

나는 @deprecated와 @deprecated의 차이가 주로 역사적이라고 생각합니다. @deprecated는 Java 5의 공식적인 방법이지만 새롭기 때문에 @DepRecated로 두 배가 될 것으로 예상됩니다.

또한 슬프게도 @DepRecated는 정보를 지정할 수 없습니다. 예를 들어 정보가 필요하지만, 예를 들어 교체로 사용되어야 할 사항을 알려 주거나 감가 상각 된 방법이 완전히 제거 될 것으로 예상되는 경우에 정보가 필요합니다.

더 많은 것을 알지 못하고 문제가 슈퍼 방법을 효과적으로 제거하자마자 사라질 것입니다. @SuppressWarnings ( "감가 상징")를 사용하여 후임자가 이해할 수있는 의견을 사용하여 ... (및 또 다른 의견에 대한 의견이 있습니다. 수퍼 방법 메소드를 삭제할 때 모든 것을 제거하라고 지시합니다). ;-)

다른 팁

내가 올바르게 이해하면 더 이상 사용되지 않은 인터페이스/함수를 구현하는 클래스의 시작 부분에 @suppresswarnings ( "감가 상각")가 필요합니다. 아니면 내가 여기서 기지에서 벗어나?

Foo ()의 파생 선언에 @deprecated를 추가하면 경고가 사라질 것이라고 생각합니다.

public interface Derived extends Base {
    @Deprecated void Foo(); 
}

당신이 원하는 것을 성취 할 방법이 없습니다.

감가 상징은 비교적 단순히 메커니즘 이며이 유스 케이스를 지원하지 않습니다.

감가 상각이 작동하는 방식은 감가 상징적 인 방법이나 필드를 참조하는 것이 경고를 생성한다는 것입니다.

유일한 예외는 더 이상 사용되지 않은 메소드/필드를 사용하는 코드가 더 이상 사용되지 않는 경우입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top