注解的创建和使用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 注解的创建和使用

注解的创建和使用

 2014/3/23 22:48:47  坏我一锅粥  程序员俱乐部  我要评论(0)
  • 摘要:什么是注解这些东西请看thinkinjava在这个实例中演示的是注解的创建和利用反射原理去获取代码信息1、解释本实例用到的注解及解释2、创建注解3、创建使用注解的类4、利用反射机制去解析类代码信息============================================================================================1
  • 标签:创建 使用 注解
什么是注解这些东西请看 think in java
在这个实例中演示的是注解的创建和利用反射原理去获取代码信息


1、解释本实例用到的注解及解释
2、创建注解
3、创建使用注解的类
4、利用反射机制解析类代码信息

============================================================================================

1、注解的方法不能有参数
   注解的返回类型是 “基本类型” “字符串” “枚举” “Class” “返回类型的数组”
   注解可以添加元注解:
   Documented:将此注解包在javadoc中
   Target:表示该注解用在什么地方,method:声明方法
   Inherited:表示继承父类中的注解
   Retention:表示在什么级别保存该注解信息,RetentionPolicy.RUNTIME:运行期 间保留

2、
class="java" name="code">
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 + "\n");
					}
					//根据注解信息条件性的做出操作
					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()*/



}
发表评论
用户名: 匿名