Java의 @inherited는 주석이 달린 클래스의 하위 클래스에 상속되도록 주석을 표시하는 데 사용되는 주석입니다. @inherited는 내장된 주석입니다. 주석은 컴파일러에 추가 정보를 제공하는 메타데이터를 나타내는 태그와 같다는 것을 알고 있기 때문입니다. Javadoc에 존재하는 내장 Annotation과 동일하게, Java에 존재하는 Meta Annotation을 또 다른 생성이 가능하다. 실제로 주석에는 두 가지 유형이 있습니다. 하나는 @override와 같이 Java 코드에 적용되는 주석 유형이고 다른 유형은 @target @inherited와 같이 다른 주석에 적용되는 주석입니다. 따라서 @inherited는 하위 클래스를 생성하거나 다른 사용자가 주석을 정의하도록 상속하려는 다른 주석에 적용되는 주석입니다.
광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
구문
Java에서 @inherited 구문은 –
@Inherited public @interface MyAnnotation {// code of the MyAnnotation } @MyAnnotation public class SuperClass { // code of the SuperClass } public class SubClass extends SuperClass { // code of the SubClass }
위 구문과 마찬가지로 SubClass 클래스는 SuperClass에서 상속되고 SuperClass에 @MyAnnotation 주석이 있으므로 @MyAnnotation 주석에서 상속됩니다.
@Inherited 주석은 @interface 접두사로 붙여야 하는 주석(위 구문의 MyAnnotation)에 사용되거나 주석이 추가됩니다. 다음으로 이 주석(MyAnnotation)은 @MyAnnotation으로 적용해야 하는 곳에서 사용할 수 있습니다. 이러한 주석은 요소 선언 직전에 적용될 수 있으며 변수, 클래스, 생성자, 메소드 등과 같은 프로그램의 모든 요소에 적용될 수 있습니다. 이 사용자 정의 주석이 슈퍼클래스에 주석되면 자동으로 상속됩니다. 아래 예에서 볼 수 있듯이 하위 클래스(위 구문과 같은 하위 클래스).
다음으로 @Inherited 주석을 사용하여 슈퍼클래스의 하위 클래스에서 상속하는 다음 예를 통해 @Inherited 주석을 더 명확하게 이해하기 위해 Java 코드를 작성합니다.
먼저 이름과 코드라는 두 개의 필드가 있는 @MyAnnotation 주석에 대한 인터페이스를 만듭니다.
코드: //MyAnnotation.java
package demo; import java.lang.annotation.Inherited; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Inherited @Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name () default "unknown"; String code () default " "; }
다음으로 클래스, 메소드 또는 변수에 주석을 추가하고 상태 이름과 상태 코드를 제공하여 위 주석을 사용하는 슈퍼클래스를 생성합니다.
코드: //Super.java
package demo; import demo.MyAnnotation; @MyAnnotation (name = "Karnataka", code = "KA") public class Super { public String getstateinfo () { return null; } }
다음으로 주석은 메타데이터이기 때문에 사용합니다. 즉, 필요할 때 주석 정보를 사용하려면 이 메타데이터나 정보를 얻을 수 있어야 합니다.
코드: //Demo.java
//as sub class package demo; import demo.MyAnnotation; import demo.Super; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; public class Demo extends Super { public static void main ( String[] arg ) throws Exception { new Super (); Class <Super>obj = Super.class; getstateinfo (obj); Method m = obj.getMethod ("getstateinfo", new Class[]{}); getstateinfo (m); } static void getstateinfo (AnnotatedElement e) { try { System.out.println ("Finding annotations on " + e.getClass ().getName ()); Annotation[] annotations = e.getAnnotations (); for (Annotation a : annotations) { if (a instanceof MyAnnotation) { MyAnnotation stateInfo = (MyAnnotation) a; System.out.println("Name of Annotation :" + stateInfo.annotationType ()); System.out.println("State Name :" + stateInfo.name ()); System.out.println("State code :" + stateInfo.code ()); System.out.println(new Demo ().getClass ().getAnnotation (MyAnnotation.class)); System.out.println(new Super ().getClass ().getAnnotation (MyAnnotation.class)); } } } catch (Exception ex) { System.out.println( ex ); } } }
출력: Demo.java 클래스를 실행하면 출력은 다음과 같습니다.
설명: 위 코드와 마찬가지로 MyAnnotation 주석이 생성되고 @Inherited라는 주석도 추가됩니다. 슈퍼클래스에서 MyAnnotation 주석은 @MyAnnotation 문을 사용하여 클래스에 주석을 달았습니다. 그리고 또 다른 클래스 Demo가 생성되는데, 이는 Superclass로 확장되었기 때문에 Superclass의 하위 클래스입니다. Demo 클래스의 기본() 메소드에서 더 멀리 떨어져 있으면 슈퍼클래스의 객체가 getstateinfo()라는 메소드를 생성하고 액세스합니다. 이 메소드를 통해 모든 주석을 반복하고 주석이 MyAnnotation에 없는지 여부를 확인합니다. 그렇다면 일부를 인쇄합니다. 위에서 볼 수 있듯이 정보의. 그러나 한 가지 중요한 점은 Demo 클래스 또는 해당 요소 중 하나가 MyAnnotation에 주석이 추가되지 않았지만 Superclass에 고유하고 Superclass가 MyAnnotation을 상속받았기 때문에 MyAnnotation이 이 클래스에 주석이 달린 것으로 여전히 표시된다는 것입니다.
다음으로 @Inherited 주석을 더 명확하게 이해하기 위해 위의 Java 코드를 다시 작성합니다. 여기서는 @Inherited 주석을 MyAnnotation 주석에 사용하지 않고(위 예에서 생성된 주석으로) 이 주석이 상속되었는지 확인합니다. 아래와 같이 상위 클래스의 하위 클래스에 있는지 여부 –
Super.java 및 Demo.java 클래스는 해당 클래스에 변경 사항 없이 위와 동일하게 유지하지만 MyAnnotation.java 클래스에서는 거의 변경하지 않고 MyAnnotation에서 주석을 달기 위해 @Inherited 주석을 제거합니다. 아래에서 볼 수 있듯이 –
코드: //MyAnnotation.java
package demo; import java.lang.annotation.Inherited; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // no @Inherited @Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name () default "unknown"; String code () default " "; }
출력: 다음으로 Demo.java 클래스를 실행하면 출력은 다음과 같습니다.
설명: 위 출력에서와 같이 상태 코드 뒤에 "null" 값이 인쇄되는 것을 볼 수 있습니다. 이는 "new Demo ().getClass () 문의 반환 값입니다. .getAnnotation (MyAnnotation.class)”, 이는 @Inherited 주석이 하위 클래스에서 상속하기 위해 MyAnnotation에 주석이 추가되지 않기 때문에 데모 클래스가 슈퍼클래스에서 MyAnnotation 주석을 상속(또는 주석을 달지)하지 않음을 의미합니다.
Java의 @inherited는 다른 주석에 적용되는 내장 주석입니다. 주석이 달린 클래스의 하위 클래스에 상속될 주석을 표시하는 데 사용됩니다. @inherited는 java.lang.annotation.Inherited 패키지에서 사용할 수 있습니다.
위 내용은 자바 @상속됨의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!