完整代码
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
查看评论