주해 생 성 및 사용

4628 단어 자바
주해 가 무엇 인지 보십시오. think in java 는 이 실례 에서 주해 의 생 성과 반사 원 리 를 이용 하여 코드 정 보 를 얻 는 것 을 보 여 줍 니 다
1. 본 사례 에 사 용 된 주해 와 해석 2 를 설명 하고 주해 3 을 만 들 며 주 해 를 사용 하 는 클래스 4 를 만 들 고 반사 체 제 를 이용 하여 클래스 코드 정 보 를 분석 합 니 다.
============================================================================================
1. 주해 하 는 방법 은 매개 변수 가 있어 서 는 안 됩 니 다.
   주해 의 반환 형식 은 '기본 형식', '문자열', '매 거 진', 'Class',' 반환 형식의 배열 '입 니 다.
   주 해 는 원 주 해 를 추가 할 수 있 습 니 다:
   Documented: 이 주석 을 javadoc 에 압축 해제 합 니 다.
   Target: 이 주 해 를 어디 에 사용 하 는 지 표시 합 니 다. method: 설명 방법
   상속
   Retention: 이 주석 정 보 를 어느 단계 에 저장 하 는 지 표시 합 니 다. Retention Policy. RUNTIME: 실행 기간 보류
2、

package com.gyj.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 *     
 * @author GYJ
 * @date 2014-3-23
 */

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo {
	String author() default "gyj";
	String date(); 
	int revision() default 1;
	String comments();
}

3、

package com.gyj.annotation;

import java.util.ArrayList;
import java.util.List;

public class AnnotationExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
	}
	
	@Override
	@MethodInfo(author = "gyj", comments = "main method", date = "2014", revision = 1)
	public String toString() {
		return "overriden to string method";
	}
	
	@Deprecated
	@MethodInfo(comments = "method1", date = "2019")
	public static void oldMethod() {
		System.out.println("old method don't use it");
	}
	
	@SuppressWarnings({"unchecked", "deprecation"})
	@MethodInfo(author = "gyj", comments = "main genericsTest", date = "2015", revision = 2)
	public static void genericsTest() {
		List l = new ArrayList<>();
		l.add("abc");
		//    
		oldMethod();
	}

}


4、
package com.gyj.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class AnnotationParsing {

	/**
	 *     
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Method[] method = Class.forName("com.gyj.annotation.AnnotationExample").getMethods();
			for (Method method1 : method) {
				//  MethodInfo        
				if (method1.isAnnotationPresent(com.gyj.annotation.MethodInfo.class)) {
					for (Annotation annotation : method1.getAnnotations()) {
						//          
						System.out.println("  " + annotation + "    " + method1 + "
"); } // MethodInfo methodInfo = method1.getAnnotation(MethodInfo.class); if (methodInfo.revision() == 1) { System.out.println("revision 1 " + methodInfo); } } } } catch (SecurityException | ClassNotFoundException e) { e.printStackTrace(); } } //out put=========================== /* @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014) public java.lang.String com.gyj.annotation.AnnotationExample.toString() revision 1 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014) @java.lang.Deprecated() public static void com.gyj.annotation.AnnotationExample.oldMethod() @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019) public static void com.gyj.annotation.AnnotationExample.oldMethod() revision 1 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019) @com.gyj.annotation.MethodInfo(author=gyj, revision=2, comments=main genericsTest, date=2015) public static void com.gyj.annotation.AnnotationExample.genericsTest()*/ }

좋은 웹페이지 즐겨찾기