飞道的博客

灵活使用 → 自定义注解+反射

404人阅读  评论(0)

完整代码

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface DebugTime{
    boolean value() default true;
    long timeout() default 100;
    String msg();
    int[] other() default {};
}

class FibTestClass {
    @DebugTime(timeout=10, msg="Time Out Of Range!", other={1, 2, 3})
    public long fib(int n) {
        return (n == 0 || n==1) ? 1 : (fib(n-1)+fib(n-2));
    }
}

public class DebugAnnotationTest {
    public static void main(String[] args) throws NoSuchMethodException {
        FibTestClass obj = new FibTestClass();
        Class<?> clazz = obj.getClass();
        // show all annotations
        for(Method method : clazz.getDeclaredMethods()){
            System.out.println(method);
            for(Annotation annotation : method.getAnnotations()){
                System.out.println(annotation.annotationType().getName());
            }
        }
        Method method = clazz.getMethod("fib", int.class);
        System.out.println(method);
        if( method.isAnnotationPresent(DebugTime.class)){
            DebugTime debug = method.getAnnotation(DebugTime.class);
            // get properties of the annotation
            boolean requireDebug = debug.value();
            long timeout = debug.timeout();
            if(requireDebug){
                long time1 = System.currentTimeMillis();
                double fib = obj.fib(40);
                long time2 = System.currentTimeMillis();
                long time = time2-time1;
                System.out.println("计算结果是:" + fib);
                System.out.println("time used: "+time);
                if(time > timeout){
                    System.err.println(debug.msg());
                }
            }
        }
    }
}

测试结果

public long FibTestClass.fib(int)
main.DebugTime
public long FibTestClass.fib(int)
计算结果是:1.65580141E8
time used: 687
Time Out Of Range!

转载:https://blog.csdn.net/weixin_43896318/article/details/104736814
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场