自定义注解
//使用元注解解释说明注解
//@Target(value = {ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) // @Target只有1个value参数 写不写都可以
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
public @interface 名称{
}
组成部分
数据类型: 字面量数据类型(基本类型+String),枚举类型, Class类型, 以上类型的数组类型
数据类型 参数名称() default 默认值;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
int id();
String name();
double score();
String[] hobby();
}
获取注解内容(反射)
获取类上注解内容
private static void fuction1() {
//1.获得类上的注解内容(类对象获取注解对象)
MyAnnotation annotation = studentClass.getAnnotation(MyAnnotation.class);//传进注解的类对象
System.out.println(annotation.id());
System.out.println(Arrays.toString(annotation.hobby()));
//1.1 获得全部
Annotation[] annotations = studentClass.getDeclaredAnnotations();
for (Annotation an : annotations) {
System.out.println(an);
}
System.out.println("------------------");
annotations = studentClass.getAnnotations();
for (Annotation an : annotations) {
System.out.println(an);
}
获取方法上注解上的方法
private static void fuction2() throws NoSuchMethodException {
//2.获得方法上的注解内容
//2.1,需要先通过反射获得方法
Method a = studentClass.getMethod("a");
Annotation[] annotations1 = a.getDeclaredAnnotations();
for (Annotation a1 : annotations1) {
System.out.println(a1);
}
System.out.println("------------");
annotations1 = a.getAnnotations();
for (Annotation a1 : annotations1) {
System.out.println(a1);
}
}