보존 주석
보존 주석은 이 유형의 주석이 어느 단계에 보존되는지를 나타냅니다. 세 가지 값이 있습니다.
1.RetentionPolicy.SOURCE - 이 유형의 주석은 소스 코드 수준에서만 유지되며 컴파일 중에는 무시됩니다.
2.RetentionPolicy.CLASS - 이 유형의 주석은 컴파일 중에 유지되며 클래스 파일에 존재하지만 JVM은 이를 무시합니다.
3.RetentionPolicy.RUNTIME - 이 유형의 주석은 JVM에 의해 유지되므로 JVM 또는 런타임 시 리플렉션 메커니즘을 사용하는 다른 코드에서 읽고 사용할 수 있습니다.
예제 5에서는 RetentionPolicy.RUNTIME 선언을 보여줍니다.
Java 주석의 예 1:
다음과 같이 코드 코드를 복사합니다.
@Retention(RetentionPolicy.RUNTIME)
공개 @interface Test_Retention {
문자열 doTestRetention();
}
이 예에서 @Retention(RetentionPolicy.RUNTIME) 주석은 Test_Retention 주석이 런타임 시 리플렉션을 통해 읽을 수 있도록 가상 머신에 의해 유지됨을 나타냅니다.
문서화된 주석
Documented Annotation은 이 Annotation이 javadoc 도구에 의해 기록되어야 함을 나타냅니다. 기본적으로 javadoc에는 Annotation이 포함되어 있지 않습니다. 그러나 Annotation을 선언할 때 @Documented를 지정하면 javadoc와 같은 도구에 의해 처리되므로 Annotation 유형 정보가 표시됩니다. 생성된 문서에도 포함됩니다. 예제 6에서는 @Documented의 사용을 자세히 보여줍니다.
Java 주석의 예 2:
다음과 같이 코드 코드를 복사합니다.
@문서화됨
공개 @인터페이스 Test_Documented {
문자열 doTestDocument();
}
그런 다음 TestAnnotations 클래스를 다음과 같이 수정합니다.
다음과 같이 코드 코드를 복사합니다.
공개 클래스 TestAnnotations {
공개 정적 무효 메인(문자열 인수[]) {
새로운 TestAnnotations().doSomeTestRetention();
새로운 TestAnnotations().doSomeTestDocumented();
}
@Test_Retention (doTestRetention="주석 정보 유지 테스트")
공공 무효 doSomeTestRetention() {
System.out.printf("테스트 주석 유형 'Retention'");
}
@Test_Documented(doTestDocument="안녕하세요 문서")
공공 무효 doSomeTestDocumented() {
System.out.printf("테스트 주석 유형 'Documented'");
}
}
이제 javadoc 명령을 사용하여 TestAnnotations.html 파일을 생성하면 그림 1과 유사한 결과가 표시됩니다.
스크린샷에서 볼 수 있듯이 문서에는 doSomeTestRetention() 메서드의 주석 유형 정보() 메서드가 없습니다. 그러나 doSomeTestDocumented() 메서드의 문서에서는 주석에 대한 설명 정보를 제공하기 때문입니다. @Documented 태그가 Test_Documented 주석에 추가되었습니다. 이전 주석 Test_Retention은 @Documented 태그를 지정하지 않았습니다.
상속된 주석(이 단락에 문제가 있을 수 있습니다...)
이는 약간 더 복잡한 주석 유형입니다. 보다 구체적으로 @Inherited 태그를 사용하여 주석을 정의한 다음 정의된 주석을 사용하여 다른 상위 클래스인 상위 클래스에 주석을 추가하는 경우를 나타냅니다. 하위 클래스가 있으면 상위 클래스의 모든 속성이 해당 하위 클래스로 상속됩니다. 예제 7에서는 @Inherited 태그를 사용하면 얻을 수 있는 이점을 확인할 수 있습니다.
Java 주석의 예 3
먼저 주석을 정의합니다.
다음과 같이 코드 코드를 복사합니다.
@상속됨
공개 @interface MyParentObject {
부울 isInherited() 기본값 true;
String doSomething() default "무엇을 할까요?";
}
다음으로 클래스에 주석이 추가됩니다.
다음과 같이 코드 코드를 복사합니다.
@MyParentObject
공개 클래스 MyChildObject {
}
보시다시피, @Inherited 태그 때문에 구현 클래스에서 인터페이스 메서드를 정의할 필요가 없습니다. 구현 클래스를 정의하는 고대 방식을 사용하면 어떻게 될까요? 아래를 보세요. 이것은 고대 구현입니다.
다음과 같이 코드 코드를 복사합니다.
공개 클래스 MyChildObject는 MyParentObject를 구현합니다.
공개 부울 isInherited() {
거짓을 반환;
}
공개 문자열 doSomething() {
반품 "";
}
공개 부울 같음(객체 obj) {
거짓을 반환;
}
공개 int hashCode() {
0을 반환합니다.
}
공개 문자열 toString() {
반품 "";
}
공개 클래스 주석 유형() {
null을 반환;
}
}
차이점이 보이나요? myParentObject의 isInherited() 및 doSomething() 메서드 외에도 부모 인터페이스의 모든 메서드를 구현해야 합니다. ) 및 hasCode() 메소드도 있습니다. java.lang.annotation.Annotation 클래스의 annotationType() 메소드도 이러한 메소드를 구현하려는지 여부에 관계없이 상속된 객체에 포함되어야 합니다.
결론적으로
이 기사에서는 JDK5의 주석 기능을 사용하여 개발을 더 쉽게 만드는 방법을 보여줍니다. 주석은 프로그램의 의미에 직접적인 영향을 미치지 않습니다. 개발 및 배포 도구는 이러한 주석을 읽고 처리할 수 있으며 주석이 포함된 프로그램을 사용합니다. 추가 Java 소스 파일, XML 문서 또는 기타 고대 유물을 대체할 수 있습니다. 주석을 사용하면 더 적은 코드로 동일한 작업을 수행할 수 있으며 컴파일 시간 오류 감지 기능이 향상됩니다. 주석의 목적은 어렵고 쓸모없는 세부 사항에 시간을 덜 쓰고 비즈니스 논리 규칙에 더 집중하는 것입니다. 이 기사는 Java 주석 시리즈의 첫 번째 부분이며 두 번째 부분에서는 주석을 사용하여 간단한 것을 개발하는 방법을 배웁니다. 웹 애플리케이션 마지막으로 3부에서는 여러 데이터베이스 테이블을 포함하는 복잡한 예를 살펴보겠습니다.