Java自定义注解的定义与使用

Java注解

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

常用註解

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

用法如下:

Java自定义注解的定义与使用
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

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(自定义注解)