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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-04 10:58:011063검색

Why doesn't Java allow interfaces to inherit annotations?

인터페이스의 주석 상속 제외: 의도적인 설계 결정

Java에서 클래스는 구현된 인터페이스에서 주석을 상속하지 않습니다. 이 제외 사항은 상속된 주석에 대한 Java 문서에 명시적으로 언급되어 있습니다. 인터페이스의 주석은 효과가 없습니다.

이 결정의 이유는 상속 충돌과 모호성을 방지하기 위한 것입니다. 다음 예를 고려하십시오.

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

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

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

class Flipp {
    @Baz("flopp")
    public void doStuff() {}
}

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

인터페이스가 주석을 상속할 수 있는 경우 MyClass의 doStuff 메소드는 두 개의 충돌하는 주석인 Foo의 @Baz("baz")와 Foo의 @Baz("phleem")를 상속합니다. 술집. 이로 인해 시스템에 모호함이 생겨 어떤 주석을 적용해야 하는지 불분명해집니다.

게다가 구현된 인터페이스에 주석을 추가하면 다중 상속 문제가 발생할 수 있습니다. Java는 클래스 수준에서 다중 상속을 지원하지 않으므로 인터페이스의 주석을 상속하도록 허용하면 다중 상속 형식이 효과적으로 생성됩니다. 이는 훨씬 더 복잡한 시나리오와 잠재적인 충돌로 이어질 수 있습니다.

따라서 Java 프로그래밍 언어 구현 시 명확성을 유지하고 충돌을 피하며 잠재적인 문제를 방지하기 위해 인터페이스에서 주석 상속을 제외하기로 결정했습니다.

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

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