前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java注解示例程序

java注解示例程序

作者头像
yawn
发布2018-03-14 11:40:49
7720
发布2018-03-14 11:40:49
举报

MyAnno.java

代码语言:javascript
复制
package com.yawn.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;

@Target({
	ElementType.METHOD, 
	ElementType.TYPE, 
	ElementType.FIELD, 
	ElementType.PARAMETER})
// 注解的生命周期(源码、编译时、运行时)
@Retention(RetentionPolicy.RUNTIME)
// 允许继承
@Inherited
// 生成javadoc时包含的注解的信息
@Documented
public @interface MyAnno {
	
	String desc() default "";
	String name();
	int age() default 18;
	
}

TestAnno.java

代码语言:javascript
复制
package com.yawn.annotation;

@MyAnno(name="yawn", desc="good boy")
public class TestAnno {
	
	@MyAnno(name="tempreture", desc="")
	private double tempreture;
	
	@MyAnno(name="iii")
	public String iii;
	
	@MyAnno(name="ageee")
	private Integer ageee;
	
	
	@MyAnno(name="method ", desc="desc")
	public void test(@MyAnno(name="id")String id, @MyAnno(name="size")int size){
		
		
	}

}

Test.java

代码语言:javascript
复制
package com.yawn.annotation;

import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

import org.junit.Before;

public class Test {
	
	Class<?> clazz;
	
	@Before
	public void before() throws ClassNotFoundException{
		clazz = Class.forName("com.yawn.annotation.TestAnno");
	}
	
	/*
	 * 类上的注解
	 */
	@org.junit.Test
	public void test(){
		printAnnoInfo(clazz);
	}
	
	/*
	 * 成员变量上的注解
	 */
	@org.junit.Test
	public void test2() throws ClassNotFoundException{
		Field[] fields = clazz.getDeclaredFields();
		for (Field field : fields) {
			printAnnoInfo(field);
		}
	}
	
	/*
	 * 方法上的注解
	 */
	@org.junit.Test
	public void test3() throws ClassNotFoundException{
		Method[] methods = clazz.getDeclaredMethods();
		for (Method method : methods) {
			printAnnoInfo(method);
		}
	}
	
	/*
	 * 方法参数上的注解
	 */
	@org.junit.Test
	public void test4() throws ClassNotFoundException{
		Method[] methods = clazz.getDeclaredMethods();
		for (Method method : methods) {
			Parameter[] params = method.getParameters();
			for (Parameter parameter : params) {
				printAnnoInfo(parameter);
			}
		}
	}
	
	
	private void printAnnoInfo(AnnotatedElement element){
		if (element.isAnnotationPresent(MyAnno.class)) {
			MyAnno myAnno = element.getAnnotation(MyAnno.class);
			System.out.println("==> "+element.getClass());
			System.out.println("[name="+myAnno.name()+", age="+myAnno.age()+", desc="+myAnno.desc()+"]");
			System.out.println();
		}
	}

}

测试结果:

代码语言:javascript
复制
==> class java.lang.Class
[name=yawn, age=18, desc=good boy]

==> class java.lang.reflect.Field
[name=tempreture, age=18, desc=]

==> class java.lang.reflect.Field
[name=iii, age=18, desc=]

==> class java.lang.reflect.Field
[name=ageee, age=18, desc=]

==> class java.lang.reflect.Method
[name=method , age=18, desc=desc]

==> class java.lang.reflect.Parameter
[name=id, age=18, desc=]

==> class java.lang.reflect.Parameter
[name=size, age=18, desc=]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档