zoukankan      html  css  js  c++  java
  • 学习总结(annotation)

    自定义MyAnnotationTest

    package com.zhanghaobo.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    
    /**
     * @author
     *自定义注解(只能用于方法上)
     */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface MyAnnotationTest {
        
        MyName name();
    }
    enum MyName{
        HELLO,WORLD,WELCOM,HELLOWORLD
    }

    测试类 Test

     1 package com.zhanghaobo.annotation;
     2 
     3 public class Test {
     4     @MyAnnotationTest(name=MyName.HELLOWORLD)
     5     public void doSomething(){
     6         System.out.println("注解修饰调用");
     7     }
     8     public void doOtherthing(){
     9         System.out.println("没有被修饰的方法");
    10     }
    11     @MyAnnotationTest(name=MyName.WELCOM)
    12     public void doSome(String... name){
    13         System.out.println("带参数的修饰调用"+name);
    14     }
    15 }


    调用类
     1 package com.zhanghaobo.annotation;
     2 
     3 import java.lang.reflect.Method;
     4 
     5 /**
     6  * @author Administrator
     7  *通过反射调用Test中的方法,并获取注解方法的类型
     8  */
     9 public class MyRefelctionTest {
    10     public static void main(String[] args) throws Exception {
    11         Class<?> clazz=null;
    12         try{
    13         clazz=Class.forName("com.zhanghaobo.annotation.Test");
    14         }catch(Exception e){
    15             e.printStackTrace();
    16         }
    17         Method[] method=clazz.getMethods();
    18         for(Method me:method){
    19             //如果是带自定义注解的执行
    20             if(me.isAnnotationPresent(MyAnnotationTest.class)){
    21                 System.out.println(me.getAnnotation(MyAnnotationTest.class)); 
    22                 //如果是无返回的,并且不带可变参数的执行
    23                 if(me.getReturnType()==Void.TYPE&&!me.isVarArgs()){
    24                     me.invoke(new Test());
    25                 }
    26             }
    27         }
    28     }
    29     
    30 }

    执行结果:

    @com.zhanghaobo.annotation.MyAnnotationTest(name=HELLOWORLD)
    注解修饰调用
    @com.zhanghaobo.annotation.MyAnnotationTest(name=WELCOM)

     
  • 相关阅读:
    Linux下运行当前目录需要加./的原因
    Linux mint界面过小无法安装(解决方法)
    哈工大机考:数组逆置
    哈工大机考:字符串内排序
    哈工大机考:求最大值
    八皇后问题的简单分析
    哈工大机考:字符串去特定字符
    哈工大机考:计算两个矩阵的乘积
    iOS 字号转换问题
    iOS 十六进制的颜色值转换为UIColor
  • 原文地址:https://www.cnblogs.com/oldcownotGiveup/p/5366209.html
Copyright © 2011-2022 走看看