Java 주석 유지 (가시 성)

3027 단어 Java Annotation
주 해 는 세 가지 가시 성 이 있다.
원본 볼 수 있 음 (SOURCE)
 
바이트 코드 보이 기 (CLASS)
 
실행 중 보이 기 (런 타임)
 
이 세 가지 가시 성 은 층 층 이 증가 하 는 것 이다. 즉, 운행 할 때 볼 수 있 는 주 해 는 앞의 두 가지 상태 에서 모두 볼 수 있다 는 것 이다.
다음은 검증 설명 하 겠 습 니 다.
 
세 개의 주석 원본 코드:
 
TestAnnoRetentionSource:
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface TestAnnoRetentionSource {

}

 
 TestAnnoRetentionClass: 
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.FIELD)
public @interface TestAnnoRetentionClass {

}

 
 TestAnnoRetentionRuntime: 
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TestAnnoRetentionRuntime {

}

 
테스트 클래스 는 다음 과 같 습 니 다:
public class AnnotationTest {
	@TestAnnoRetentionSource
	public int sourceVisible;
	@TestAnnoRetentionClass
	public int classVisible;
	@TestAnnoRetentionRuntime
	public int runtimeVisible;

	public static void main(String[] args) {
		Class<AnnotationTest> clazz = AnnotationTest.class;
		for (Field each : clazz.getFields()) {
			System.out.println(each.getName() + ":");
			for (Annotation anno : each.getAnnotations()) {
				System.out.println("\t" + anno.annotationType().getName());
			}
			System.out.println();
		}
	}
}

 
세 개의 주해 류 가 각각 세 개의 가시 성에 대응 하고 테스트 류 중의 세 개의 실례 변수 도 각각 대응 하 는 주해 로 수식 하 는 것 을 볼 수 있다.
테스트 클래스 입력 은:
 
sourceVisible:

classVisible:

runtimeVisible:
	cn.teaey.test.annotation.TestAnnoRetentionRuntime

 
지금까지 우 리 는 Runtime 의 주 해 를 우리 코드 가 실 행 될 때 만 얻 을 수 있다 는 것 을 알 수 있다.
 
테스트 클래스 의 바이트 코드 (class) 파일 을 javap 명령 으로 봅 니 다.
명령: javap - verbose AnnotationTest
입력 (부분):
 
1. const #5 = Asciz        sourceVisible;
2. const #7 = Asciz        classVisible;
3. const #8 = Asciz        RuntimeInvisibleAnnotations;
4. const #9 = Asciz        Lcn/teaey/test/annotation/TestAnnoRetentionClass;;
5. const #10 = Asciz       runtimeVisible;
6. const #11 = Asciz       RuntimeVisibleAnnotations;
7. const #12 = Asciz       Lcn/teaey/test/annotation/TestAnnoRetentionRuntime;;
 
첫 번 째 줄 에서 볼 수 있 듯 이 sourceVisible 은 class 바이트 코드 에 주석 수식 이 없습니다.
2, 3, 4 줄 에서 볼 수 있 듯 이 classVisible 변 수 는 Runtime Invisible Annotations 가 실 행 될 때 보이 지 않 는 주석 TestAnno Retention Class 에 의 해 수식 되 었 습 니 다.
5, 6, 7 줄 설명 에 따 르 면 runtime Visible 변 수 는 Runtime Visible Annotations 가 실 행 될 때 볼 수 있 는 주석 TestAnno Retention Runtime 에 의 해 수식 되 었 습 니 다.
 
요약:
SOURCE: JAVA 원본 (. java) 파일 에 만 존재 합 니 다.
CLASS: JAVA 소스 코드 와 바이트 코드 (class) 파일 에 존재 합 니 다.
RUNTIME: 원본 코드, 바이트 코드 에서 볼 수 있 고 코드 에서 접근 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기