자바 원 주해@Inherited 의 사용 상세 설명

1.원본 문서 먼저 보기

/**
 * Indicates that an annotation type is automatically inherited. If
 * an Inherited meta-annotation is present on an annotation type
 * declaration, and the user queries the annotation type on a class
 * declaration, and the class declaration has no annotation for this type,
 * then the class's superclass will automatically be queried for the
 * annotation type. This process will be repeated until an annotation for this
 * type is found, or the top of the class hierarchy (Object)
 * is reached. If no superclass has an annotation for this type, then
 * the query will indicate that the class in question has no such annotation.
 *
 * <p>Note that this meta-annotation type has no effect if the annotated
 * type is used to annotate anything other than a class. Note also
 * that this meta-annotation only causes annotations to be inherited
 * from superclasses; annotations on implemented interfaces have no
 * effect.
 *
 * @author Joshua Bloch
 * @since 1.5
 * @jls 9.6.3.3 @Inherited
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}
상기 코드 주석 부분 은 구 글 번역 대 법 으로 대체적으로
주석 형식 자동 계승 을 표시 합 니 다.주석 형식 성명 에 계 승 된 원 주석 이 존재 하고 사용자 가 클래스 성명 에서 주석 형식 을 조회 하 며 클래스 성명 에 이 유형의 주석 이 없 으 면 이 클래스 의 초 클래스 는 자동 으로 주석 형식 을 조회 합 니 다.이 유형의 주석 을 찾 거나 클래스 구조(Object)의 맨 위 에 도달 할 때 까지 이 과정 을 반복 합 니 다.초 클래스 가 이 유형의 주석 을 가지 고 있 지 않 으 면 조 회 는 토론 하 는 클래스 에 이러한 주석 이 없 음 을 표시 합 니 다.
클래스 를 제외 한 모든 내용 을 주석 형식 으로 주석 하면 이 메타 주석 형식 은 작 동 하지 않 습 니 다.또한 이 원 주석 은 초 류 에서 주석 을 계승 하 는 것 만 초래 할 수 있 음 을 주의해 야 한다.실 현 된 인터페이스의 주석 이 잘못 되 었 습 니 다.
상술 한 설명 을 통 해 알 수 있 듯 이 이 주해 의 주해 부류 의 자 류 를 사용 하면 부류 의 주 해 를 계승 할 수 있다.
2.코드 테스트
2.1 소유@Inherited 주해

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface InheritedTest {

  String value();
}

@InheritedTest("  Inherited")
public class Person {


  public void method(){
  }


  public void method2(){
  }
}

public class Student extends Person {
}
테스트:

public class TestInherited {


  public static void main(String[] args) {
    Class<Student> studentClass = Student.class;
    if (studentClass.isAnnotationPresent(InheritedTest.class)){
      System.out.println(studentClass.getAnnotation(InheritedTest.class).value());
    }


  }
}
출력:

2.2@Inherited 주석 이 없 음

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface IsNotInherited {
  String value();
}

@IsNotInherited("   Inherited")
public class Person {


  public void method(){
  }


  public void method2(){
  }
}

public class Student extends Person {
}
테스트:

public class TestInherited {


  public static void main(String[] args) {
    Class<Student> studentClass = Student.class;
    if (studentClass.isAnnotationPresent(IsNotInherited.class)){
      System.out.println(studentClass.getAnnotation(IsNotInherited.class).value());
    }


  }
}

임 용 을 출력 하지 않 았 습 니 다.@Inherited 주해 가 없 는 클래스 의 하위 클래스 는 이 주 해 를 계승 하지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기