自定义注解【一】
来源:互联网 发布:soap json 编辑:程序博客网 时间:2024/05/24 06:40
一、背景
虽然经常使用注解,但是之前对于注解的原理什么都不懂,然后看书写了个demo,算是初窥其面目。
二、例子
package cn.sp.test;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface ExceptionTest {Class<? extends Exception> value();}
package cn.sp.test;public class Sample2 {@ExceptionTest(ArithmeticException.class)public static void m1(){//Test should passint i=0;i=i/i;}@ExceptionTest(ArithmeticException.class)public static void m2(){// should failint[] a = new int[0];int i = a[1];}@ExceptionTest(ArithmeticException.class)public static void m3(){// should fail(no exception)}}
package cn.sp.test;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class RunTest {public static void main(String[] args) throws Exception {int tests = 0;int passed = 0;Class<?> testClass = Class.forName(args[0]);//cn.sp.test.Sample2for (Method m :testClass.getDeclaredMethods()) {if(m.isAnnotationPresent(ExceptionTest.class)){tests++;try {m.invoke(null);System.out.printf("Test %s failed:no exception%n",m);} catch (InvocationTargetException e) {Throwable exc = e.getCause();Class<? extends Exception> excType = m.getAnnotation(ExceptionTest.class).value();if(excType.isInstance(exc)){passed++;}else{System.out.printf("Test %s failed:excepted %s, got %s%n",m,excType.getName(),exc);}} catch (Exception e) {// TODO: handle exceptionSystem.out.printf("INVALID @Test:"+m);}}}System.out.printf("Passed:%d ,Failed:%d%n",passed,tests-passed);}}
运行结果:
Test public static void cn.sp.test.Sample2.m3() failed:no exceptionTest public static void cn.sp.test.Sample2.m2() failed:excepted java.lang.ArithmeticException, got java.lang.ArrayIndexOutOfBoundsException: 1Passed:1 ,Failed:2
0 0
- 自定义注解(一)
- 自定义Java注解(一)
- 自定义注解【一】
- 注解(Annotation)自定义注解(一)
- 自定义注解的学习(一)
- 自定义注解整理 篇一
- java自定义注解及注解使用(注解学习一)
- Java注解(一):注解介绍及自定义注解入门
- Java:Annotation 浅析(一 )自定义注解
- (A6,一)java自定义注解
- 自定义注解之编译时注解(RetentionPolicy.CLASS)(一)
- 自定义注解之编译时注解(RetentionPolicy.CLASS)(一)
- 自定义注解
- 自定义注解
- 自定义注解
- 自定义注解
- 自定义注解
- 自定义注解
- Vim的使用
- Leetcode-494. Target Sum
- java
- 复制一些大神的知识-Unity3D、NGUI性能优化方法
- <36>python学习笔记——论事件驱动与异步IO
- 自定义注解【一】
- 【BZOJ3963】【ACM-WF2011】MachineWorks(CDQ分治+斜率优化)
- 子div浮动,父div的如何撑起来
- vb.net 教程 1-7 数据类型:Boolean
- 《编程之法》:字符串的包含
- Linux 用root账号创建一个新的登录账号
- POJ 3576
- 关于Warning: 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/' already的解决方法
- 有关opencv的学习(12)—积分图