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 중국어 웹사이트의 기타 관련 기사를 참조하세요!