자바 원 주해@Inherited 의 사용 상세 설명
4049 단어 자바원 주해@Inherited
/**
* 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 주해 가 없 는 클래스 의 하위 클래스 는 이 주 해 를 계승 하지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.