黑马训练营--注解(二)

元注解有以下几种:

@Target 表示该注解用于什么地方。

@Retention表示要在什么级别保存该注解。

@Documented 将此注解包含在JavaDoc中。

@Inherited 允许子类继承父类中的注解。

Java中内置的注解@Override用于SOURCE级别,@SuppressWarnings用于SOURCE级别,@Deprecated用于RUNTIME级别。指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS

编写注解类型

下面将用来读取PasswordUtils类,利用反射机制读取UseCase注解。

import java.lang.reflect.*; import java.lang.annotation.*;

public class PasswordUtils{  @UseCase(id=11,description="test1")  public void test1(){}    public void test2(){}    //description的值用默认的值  @UseCase(id=12)  public void test3(){}    @UseCase(id=13,description="private")  private void test4(){};    @UseCase(id=14,description="protected")  protected void test5(){};    @UseCase(id=14,description="default")  void test6(){};    public static void trackUseCases(Class<?> clazz){   //利用反射返回对象的一个数组,这些对象反映此Class对象表示   //的类或接口声明的所有方法,包括公共,保护,默认访问和私有方法,但不包括继承的方法。    Method[] methods = clazz.getDeclaredMethods();    for(Method m : methods){     //如果指定类型的注释存在于此元素上,则返回 true,     //否则返回 false。此方法主要是为了便于访问标记注释而设计的。      if(m.isAnnotationPresent(UseCase.class)){       UseCase uc = m.getAnnotation(UseCase.class);      System.out.println("Method Name:" + m.getName() + " id:" + uc.id()      + "  decription:" + uc.description());     }    }     }  public static void main(String[] args){   trackUseCases(PasswordUtils.class);  } }

注意:如果注解中只有value一个属性,在写注意元素时,value=可以不用写。

注解元素

注解元素可用的类型如下:

所有的基本类型(int ,float,double等)

String

Class

enum

Annotation

以上类型的数组

如果你使用了其他类型编译器就会报错。

public @interface MyAnnotation{
  String value();
}
enum AlarmPoints{
		START1,START2,LOBBY,OFFICE1,OFFICE2;
		}
import java.lang.annotation.*;
//target的参数可以用数组表示
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase{
	public int id();
	public String description() default "no description";
	//class类型
	Class clazz();
	//枚举类型
	AlarmPoints alarmPoints() default AlarmPoints.START1;
	//注解类型
	MyAnnotation myAnno() default @MyAnnotation("value");
	//数组类型
	int[] arrAttr() default {1,2,3};
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值