Java注解

元注解: 专职负责注解其他的注解
  • @Target: 表示该注解可以用于什么地方,可用的ElementType参数包括:
    • CONSTRUCTIOR: 构造器的声明
    • FIELD: 域声明(包括enum实例)
    • LOCAL_VARIABLE: 局部变量声明
    • METHOD: 方法声明
    • PACKAGE: 包声明
    • PARAMETER: 参数声明
    • TYPE: 类、接口(包括注解类型)或enum声明
  • @Retention: 表示需要在级别保存该注解类型,可选的RetetionPolicy参数包括:
    • SOURCE: 注解将被编译器丢弃
    • CLASS: 注解在class文件中可用,但会被VM丢弃
    • RUNTIME: VM将在运行期也保留注解,因此可以通过反射机制读取注解的信息
注解元素: 注解元素可用的类型如下
  • 所有的基本数据类型(int, float, boolean等)(不允许使用包装类)
  • String
  • Class
  • enum
  • Annotation
  • 以上类型的数组
定义一个注解,并设置默认值
@Target(ElementType.METHOD)
@Retention(RetetionPolicy.RUNTIME)
public @interface @SimulatingNull{
    public int id() default -1;
    public String description() default "";
}
用法

如果注解中仅有一个元素无默认值(需要赋值),此时无需使用名-值对的这种语法

实例
/**
 * 模拟JUnit实现单元测试
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Test {}

/**
 * @Test注解处理器
 */
class TestProcessor {
    public static void process(Class cl) {
        try {
            Object obj = cl.newInstance();
            for(Method method: cl.getDeclaredMethods()) {
                // System.out.println("--> "+method.getName());
                Annotation[] anns = method.getDeclaredAnnotations();
                if(anns.length < 1)
                    continue;
                if(anns[0] instanceof Test) {
                    System.out.println("==== [Testing]: " + method.getName() + " ====");
                    try {
                        method.invoke(obj);
                    } catch (java.lang.reflect.InvocationTargetException e) {
                        e.printStackTrace();
                    }
                }
            }

            System.out.println("==== you have passed this test. ====");
        } catch(InstantiationException|IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
class NeedTest {
    @Test
    public void run() {
        System.out.println("I'm running my Test...");
    }
}
public class Client {
    public static void main(String[] args) {
        TestProcessor.process(NeedTest.class);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值