>  기사  >  Java  >  자바 @상속됨

자바 @상속됨

WBOY
WBOY원래의
2024-08-30 16:22:26268검색

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 주석에서 상속됩니다.

Java에서 @Inherited는 어떻게 작동하나요?

@Inherited 주석은 @interface 접두사로 붙여야 하는 주석(위 구문의 MyAnnotation)에 사용되거나 주석이 추가됩니다. 다음으로 이 주석(MyAnnotation)은 @MyAnnotation으로 적용해야 하는 곳에서 사용할 수 있습니다. 이러한 주석은 요소 선언 직전에 적용될 수 있으며 변수, 클래스, 생성자, 메소드 등과 같은 프로그램의 모든 요소에 적용될 수 있습니다. 이 사용자 정의 주석이 슈퍼클래스에 주석되면 자동으로 상속됩니다. 아래 예에서 볼 수 있듯이 하위 클래스(위 구문과 같은 하위 클래스).

Java에서 @Inherited 주석을 구현하는 예

다음으로 @Inherited 주석을 사용하여 슈퍼클래스의 하위 클래스에서 상속하는 다음 예를 통해 @Inherited 주석을 더 명확하게 이해하기 위해 Java 코드를 작성합니다.

예시 #1

먼저 이름과 코드라는 두 개의 필드가 있는 @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 주석에 사용하지 않고(위 예에서 생성된 주석으로) 이 주석이 상속되었는지 확인합니다. 아래와 같이 상위 클래스의 하위 클래스에 있는지 여부 –

예시 #2

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

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