zoukankan      html  css  js  c++  java
  • Java自定义注解的定义与使用

    Java注解

      Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中出现。

    常用註解

      在日常編程中,我們遇到的註解有@Override、@SuppressWarnings等等,@Override表示重寫父類的方法,@SuppressWarnings表示忽略警告信息。

    用法如下:

    package com.ares.Temp;
    
    /**
     * @author Ares
     */
    public class T {
        
        @SuppressWarnings("unused")
        public static void test(){
            int i;
            System.out.println("This is a test.");
        }
        
        @Override
        public String toString(){
            return "Test Class";
        }
        
    }
    Override 和 SuppressWarnings

    自定義註解

      它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface,下面,我們用代碼來演示。

    package com.annotation.test;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface FruitColor {
    
        enum Color{RED,YELLOW,WHITE}
        
        Color fruitColor() default Color.RED;
        
    }
    package com.annotation.test;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface FruitName {
    
        String value() default "";
        
    }
    package com.annotation.test;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface FruitProvider {
    
        int id() default 0;
        
        String user() default "";
        
        String address() default "";
        
    }

    以上是定義的蘋果的相關信息,下面,我們開始使用上面定義的註解來進行具體的實現:

    package com.annotation.test;
    
    import com.annotation.test.FruitColor.Color;
    
    public class Apple {
    
        @FruitName(value="FuShi Apple")
        private String fruitName;
        
        @FruitColor(fruitColor=Color.RED)
        private String fruitColor;
        
        @FruitProvider(id=1,user="Tom",address="China")
        private FruitProvider provider;
    }

    上面的Apple類是使用我們自己定義的註解來對類成員進行修飾。接下來,我們獲取我們的註釋信息:

     1 package com.annotation.test;
     2 
     3 import java.lang.reflect.Field;
     4 
     5 public class Test {
     6 
     7     
     8     public static void getFruitInfo(String clas){
     9         try {
    10             Class<?> cls = Class.forName(clas);
    11             Field[] fields = cls.getDeclaredFields();
    12             
    13             for (Field field : fields) {
    14                 if(field.isAnnotationPresent(FruitName.class)==true){
    15                     FruitName name = field.getAnnotation(FruitName.class);
    16                     System.out.println("Fruit Name:"+name.value());
    17                 }
    18                 if(field.isAnnotationPresent(FruitColor.class)){
    19                     FruitColor color = field.getAnnotation(FruitColor.class);
    20                     System.out.println("Fruit Color:"+color.fruitColor());
    21                 }
    22                 if(field.isAnnotationPresent(FruitProvider.class)){
    23                     FruitProvider Provider = field.getAnnotation(FruitProvider.class);
    24                     System.out.println("Fruit FruitProvider: ProviderID:"+Provider.id()+" Provider:"+Provider.user() +" ProviderAddress:"+Provider.address());
    25                 }
    26             }
    27             
    28             
    29         } catch (ClassNotFoundException e) {
    30             e.printStackTrace();
    31         }
    32     }
    33     
    34     public static void main(String[] args) {
    35         getFruitInfo("com.annotation.test.Apple");
    36     }
    37     
    38 }

    輸出結果爲:

    Fruit Name:FuShi Apple
    Fruit Color:RED
    Fruit FruitProvider: ProviderID:1 Provider:Tom ProviderAddress:China
  • 相关阅读:
    MVC中使用AuthorizeAttribute做身份验证操作
    Entity Framework 5.0 Code First全面学习
    AngularJs学习教程
    安装完Oracle数据库,给scott账户解锁方法
    Signalr学习教程
    javascript学习教程【Qi Fei】
    并行开发
    MongoDB教程【一】
    统计学习概念
    自学Python的点滴
  • 原文地址:https://www.cnblogs.com/icerainsoft/p/3471749.html
Copyright © 2011-2022 走看看