>Java >java지도 시간 >Java 인터페이스가 주석을 상속하지 않는 이유는 무엇입니까?

Java 인터페이스가 주석을 상속하지 않는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-04 11:47:30988검색

Why Don't Java Interfaces Inherit Annotations?

Java 인터페이스의 주석 상속

@Inherited 주석으로 표시되는 주석 상속을 사용하면 주석이 슈퍼클래스에서 하위 클래스로 전파될 수 있습니다. 그러나 이 규칙의 주목할 만한 예외는 구현된 인터페이스의 주석이 구현 클래스에 의해 상속되지 않는다는 것입니다.

@Inherited에 대한 문서에 따르면 "이 메타 주석은 주석이 슈퍼클래스에서만 상속되도록 합니다. 주석 구현된 인터페이스에는 아무런 영향이 없습니다."

비상속 뒤에 대한 추론

이 디자인 결정은 클래스가 동일한 충돌 주석으로 여러 인터페이스를 구현하는 시나리오에서 상속 충돌을 방지합니다. . 다음 예를 고려하십시오.

<code class="java">@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Inherited
public @interface Baz { String value(); }

public interface Foo{
    @Baz("baz") void doStuff();
}

public interface Bar{
    @Baz("phleem") void doStuff();
}

public class MyClass implements Foo, Bar{}</code>

주석이 인터페이스에서 상속된 경우 어떤 @Baz 값이 MyClass.doStuff() 메서드와 연결됩니까? "baz", "phleem" 또는 다른 것?

실용적 의미

인터페이스의 주석 상속은 일반적으로 충돌 가능성과 여러 인터페이스가 충돌하는 주석을 지정할 때 올바른 주석을 결정하는 데 어려움이 있습니다. 슈퍼클래스의 주석에 의존하거나 종속성 주입 프레임워크에서 메서드 차단을 위한 대체 메커니즘을 사용하는 것이 좋습니다.

위 내용은 Java 인터페이스가 주석을 상속하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.