【Java】灵活使用自定义注解和反射
生活随笔
收集整理的這篇文章主要介紹了
【Java】灵活使用自定义注解和反射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
完整代碼
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 annotationsfor(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 annotationboolean 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!總結
以上是生活随笔為你收集整理的【Java】灵活使用自定义注解和反射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软件工程】用户在软件项目中承担的工作
- 下一篇: FirstStep(洛谷P3654题题解