1. rendentionpolicy.source : 주석은 소스 파일에만 유지됩니다. Java 파일이 클래스 파일로 컴파일되면 주석이 버려집니다.
2. rendentionPolicy.class : 주석은 클래스 파일에 유지되지만 JVM이 클래스 파일을로드 할 때 포기됩니다. 이것은 기본 수명주기입니다.
3. rendentionPolicy.runtime : 주석은 클래스 파일에 저장 될뿐만 아니라 JVM이 클래스 파일을로드 한 후에도 여전히 존재합니다.
이 세 가지 수명주기는 Java 소스 파일 (.java 파일) --->. 클래스 파일 ----> 메모리의 바이트 코드에 해당합니다.
그렇다면 올바른 주석 수명주기를 어떻게 선택합니까?
우선, 우리는 수명주기 길이 소스 <class <런타임을 명확히해야하므로 전자가 행동 할 수있는 곳에서 후자는 행동 할 수 있습니다. 일반적으로 런타임에 주석 정보를 동적으로 얻어야하는 경우 런타임 주석 만 사용할 수 있습니다. 보조 코드 (예 : Butterknife)를 생성하는 등 컴파일 시간에 일부 전처리 작업을 수행하려면 클래스 주석을 사용할 수 있습니다. @override 및 @suppresswarnings와 같은 일부 점검 작업 만 수행하는 경우 소스 주석을 사용할 수 있습니다.
다음은 런타임 주석의 간단한 응용 프로그램입니다.
주석을 얻으십시오
패키지, 클래스, 필드, 메소드에서 얻을 수있는 반사를 통해 런타임 주석을 얻어야합니다 ... 기본 방법은 동일합니다. 몇 가지 일반적인 방법은 다음과 같습니다.
/*** 지정된 유형의 주석을 가져옵니다*/public <a extends annotation> getAnnotation (class <a> 주석 유형);/*** 모든 주석을 얻습니다.*/public ynotation [] getAnnotation ();/*** 모든 주석을 얻는다. 이 요소에 존재하고, 그렇지 않으면 true를 반환합니다. 그렇지 않으면*/public boolean isannotationpresent (class <? extends annotation> annotationtype);/***메소드*/public annotation [] getParameterAnnotations ()에서 매개 변수에 대한 모든 주석을 가져옵니다.
이러한 기능을 사용하려면 먼저 클래스, 필드, 메소드 등 반사를 통해 해당 요소를 얻어야합니다.
맞춤형 주석
사용자 정의 주석을 사용하는 간단한 방법을 살펴 보겠습니다. 여기서는 먼저 3 개의 런타임 주석을 정의합니다.
// 적용 가능한 클래스, 인터페이스 (주석 유형 포함) 또는 enum @retention (rendentionPolicy.runtime) @Target (elementType.type) public @Interface classInfo {String value (); } // 적용 가능한 필드 속성, 또한 enum 상수도 @retention (rendentionpolicy.runtime) @target (elementType.field) public @Interface fieldInfo {int [] value (); } // 적용 가능한 방법 @retention (retentionpolicy.runtime) @target (elementtype.method) public @interface methodInfo {string name () 기본값 "long"; 문자열 데이터 (); int age () 기본 27; }이 세 가지 주석은 다른 요소에 적용 할 수 있으며 모두 다른 속성을 가지고 있습니다. 주석을 사용하는 경우이 속성 값을 설정해야합니다.
이 주석을 사용하기 위해 다른 테스트 클래스를 정의하십시오.
/*** 테스트 런타임 주석*/@classInfo ( "테스트 클래스") 공개 클래스 testRuntimeAnnotation {@fieldInfo (value = {1, 2}) public String fieldInfo = "FiledInfo";@fieldInfo (value = {10086}) public int i = 100; @methodinfo (name = "" "" "" "" "" "" "" "") getMethodInfo () {return testruntimeAnnotation.class.getSimplename ();}}여전히 사용하는 것은 매우 간단합니다. 마지막으로 코드에서 주석 정보를 얻는 방법을 살펴 보겠습니다.
/*** 테스트 런타임 주석*/private void _testruntimeAnnotation () {stringBuffer sb = new StringBuffer (); class <?> cls = testRuntimeAnnotation.class; constructor <?> [] 생성자 = cls.getConstructors (); // 지정된 유형의 주석을 얻습니다. ") .Append ("/n "); classInfo = cls.getAntintation (classInfo.class); if (classInfo! = null) {sb.append (modifier.toString (cls.getModifiers ()). value : ") .append (classInfo.value ()). 부록 ("/n/n ");} sb.append ("Field Annotation : ") .append ("/n "); field [] fields = cls.getDeclaredFields (for (field : fields) {FieldInfo FieldInfo = Field.GetOntation (fieldannot); (FieldInfo! = null) {sb.append (modifier.toString (field.getModifiers ()). Append ( "") .Append (field.getType (). getSimplename ()). Append ( "") .Append (field.getName ()). 부록 ( "/n"); "Annation Value ("). ") .Append (arrays.toString (fieldInfo.value ())). Append ("/n/n ");}} sb.Append ("메소드 주석 : ") .Append ("/n "); method [] method = cls.getDeclaredMethods (); {method : methodinfo methodinfo = cls. method.getAntotation (methodInfo.class); if (methodInfo! = null) {sb.append (modifier.toString (method.getModifiers ())). Append ( "") .Append (method.getReTurnType (). getSimplename ()). .append (method.getName ()). Append ( "/n"); sb.append ( "주석 값 :") .append ( "/n"); sb.append ( "name :") .append (methodinfo.name ()). 부록 ( "/n"); sb.append ( "data :" ") .append (methodInfo.data ()). Append ("/n "); sb.append ("age : ") .append (methodInfo.age ()). 부록 ("/n ");}} system.out.print (sb.toString ());}연산은 반사를 통해 해당 요소를 얻은 다음 요소에 주석을 얻은 다음 마침내 주석의 속성 값을 얻기 위해 수행됩니다.
출력을 살펴 보겠습니다. 여기에서는 휴대 전화에 직접 표시하겠습니다.
요약
위의 내용은 Java 언어 주석의 기본 개념에 대한 자세한 설명이며, 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!