Java - 给编译器看的Annotation

基础概念

package com.itlwc;

// 枚举类型指定范围
enum RetentionPolicy {
	CLASS, // 只在编译之后class中起作用
	RUNTIME, // 在运行的时候起作用,因此可以反射性地读取
	SOURCE, // 只在源代码中起作用
}

// 枚举类型指定作用范围
enum ElementType {
	ANNOTATION_TYPE, // 注释类型出现
	CONSTRUCTOR, // 构造方法出现
	FIELD, // 字段声明(包括枚举常量)出现
	LOCAL_VARIABLE, // 局部变量声明出现
	METHOD, // 方法声明出现
	PACKAGE, // 包声明出现
	PARAMETER, // 参数声明出现
	TYPE, // 类,接口(包括注释类型)或枚举声明出现
}

// 文档注释格式,如果出现则其注释将出现在doc文档中
@interface Documented {
}

// 指示注释类型的注释要保留多久,如果不存在Retention注释,则默认为RetentionPolicy.CLASS
@interface Retention {
	public RetentionPolicy value();
}

// 可以出现在那些元素之上,如果不存在Target注释,则声明的类型可以用任意元素之上
@interface Target {
	public ElementType[] value();
}

@Documented
@Retention(value = RetentionPolicy.SOURCE)
@Target(value = { ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR })
public class Test {
	public static void main(String[] args) {

	}
}

系统内置Annotation

@Override
	java.lang.Override,注解类型的
	声明
		@Target(value=METHOD)
		@Retention(value=SOURCE)
		public @interface Override
	用在方法之上,用来告诉编译器这个方法重写了父类的方法
@Deprecated
	java.lang.Deprecated,注解类型的
	声明
		@Documented
		@Retention(value=RUNTIME)
		public @interface Deprecated
	用在方法之上,表示方法不建议使用(表示有危险或者有更好的代替)
@SuppressWarnings
	java.lang.SuppressWarnings,注解类型的
	声明
		@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
		@Retention(value=SOURCE)
		public @interface SuppressWarnings
	括号里面的是value等于一个数组,表示方法是
		@SuppressWarnings(value={"unchecked","unused"})
		也可以写成下面这种
		@SuppressWarnings({"unchecked", "unused"})
@Inherited
	java.lang.Inherited,注解类型的
	声明
		@Documented
		@Retention(value=RUNTIME)
		@Target(value=ANNOTATION_TYPE)
		public @interface Inherited
	表示一个Annotation能否被使用类的子类继承下去,如果没写,则无法继承

自定义Annotation

package com.itlwc;

enum Color {
	RED, GREEN, BLUE;
}

@interface Annotation {
	public String key();
	//使用默认值
	public String value() default "牛小俊";
	//使用枚举
	public Color color() default Color.RED;
	//使用数组
	public String[] url();
}

@Annotation(
		key = "lwc",
		value = "李文超",
		color = Color.GREEN,
		url = { "www.baidu.com", "www.guge.com" }
)
public class Test {

}

通过反射取得方法上所有Annotation

package com.itlwc;

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

class Info {
	@Override
	@Deprecated
	@SuppressWarnings(value = "")
	public String toString() {
		return "hello";
	}
}

public class Test {
	public static void main(String[] args) throws Exception {
		Class<?> cls = Class.forName("com.itlwc.Info");
		Method methods = cls.getMethod("toString");
		Annotation[] annotations = methods.getAnnotations();
		for (Annotation a : annotations) {
			System.out.println(a);
		}
	}
}

/*
打印结果: 
	@java.lang.Deprecated()
	这个例子说明了Runtime中只能找到@Deprecated
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值