1.自定义注解:
public @interfase Test{
//没有默认值
String name();
//枚举型注解,并赋予默认值
public enum Course{
CHINESE,
MATH
};
Course course() defalut Course.MATH;
}
例如: @Test(name="张三", course=Test.Course.MATH)
public void helloWord(){}
2.使用jdk定义注解:
用 @Target 指定ElementType属性
public enum ElementType {
// 用于类,接口,枚举,但不用于枚举值。
TYPE,
// 字段上,包括枚举值
FIELD,
// 方法,不包括构造方法
METHOD,
// 方法的参数
PARAMETER,
// 构造方法
CONSTRUCTOR,
// 本地变量或catch语句
LOCAL_VARIABLE,
// 用于注解
ANNOTATION_TYPE,
// Java包
PACKAGE
//泛型,1.8新增
TYPE_PARAMETER,
//任意类类型,1.8新增
TYPE_USE
}
jdk1.8新增注解使用示例:
例1: 注解定义: @Target(ElementType.TYPE_PARAMETER)
public @interface Annotation1 {}
注解使用: public class Test<@Annotation1 T>{}
例2: 注解定义: @Target(ElementType.TYPE_USE)
public @interface Annotation2 {}
注解使用: @Annotation2
public class Test{
@Annotation2 String text;
List<@Annotation1 Object> list = new ArrayList<>();
}
3.注解保持性:
用 @Retention 指定RetentionPolicy 属性
public enum RetentionPolicy {
// 此类型会被编译器丢弃,不会保存到class文件中
SOURCE,
// 此类型注解会保留在class文件中,但JVM会忽略它
CLASS,
// 此类型注解会保留在class文件中,JVM会读取它
RUNTIME
}
4.支持文档化:
@Documented
public @interface Greeting {}
注意:如果用该注解则RetentionPolicy必须设置为RUNTIME。
5.继承:
让该注解可以被继承,可以作用到子类。
@Inherited
public @interface Greeting {}
6.获取注解的方法:
public class AnnotationReadTest {
public static void main(String[] args) throws Exception {
// 获取Test类对象
Class c = Class.forName("com.sun.Test");
// 获取该类所有方法
Method[] methods = c.getDeclaredMethods();
// 遍历方法
for (Method method : methods) {
// 获取方法上面的注解
Annotation[] annotations = method.getDeclaredAnnotations();
// 遍历注解
for (Annotation annotation : annotations) {
System.out.println("方法名为:" + method.getName() + ",方法对应的注解为:" + annotation.annotationType().getSimpleName());
//获取该注解的所有变量
Method[] meths = annotation.annotationType().getDeclaredMethods();
// 遍历每个注解的变量
for (Method m : meths) {
System.out.println("注解的变量名为:" + m.getName());
}
}
}
}
}
另外:
Class.getDeclaredFields()和Class.getFields()的区别:
Class.getDeclaredFields()获取该类所有的字段,与修饰符无关。和Class.getDeclaredMethods方法相同。
Class.getFields()获取该类以及该类所继承的父类所有public修饰符修饰的字段。和Class.getMethods方法相同。
自定义注解,jdk注解,jdk1.8新增注解。
最新推荐文章于 2024-07-24 17:13:34 发布