《java基础学习之——自定义注解》

来源:互联网 发布:淘宝的一件代发是怎么 编辑:程序博客网 时间:2024/05/16 04:57


在上一篇博客《java基础学习之——注解Annotation》中,从4个W1个H总结了我对注解的一些认识。接下来,我们一起动手来自定义一个注解,怎么样?

一:定义一个水果颜色注解

package com.annotations.test2;import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import java.lang.annotation.ElementType;import java.lang.annotation.RetentionPolicy;/** * 水果颜色注解 * @author  * */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface FruitColor {    /**     * 颜色枚举     * @author peida     *     */    public enum Color{ BULE,RED,GREEN};        /**     * 颜色属性     * @return     */    Color fruitColor() default Color.GREEN;}


二:定义一个说过名称的注解

package com.annotations.test2;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 水果名称 * @author 贾丽敏 * */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface FruitName {String value() default "";}

三:定义一个水果苹果类,使用以上两个注解:

package com.annotations.test2;import com.annotations.test2.FruitColor.Color;/** * 苹果实体类 * @author 贾丽敏 * */public class Apple {@FruitName("Apple")    private String appleName;        @FruitColor(fruitColor=Color.RED)    private String appleColor;        public void setAppleColor(String appleColor) {        this.appleColor = appleColor;    }    public String getAppleColor() {        return appleColor;    }        public void setAppleName(String appleName) {        this.appleName = appleName;    }    public String getAppleName() {        return appleName;    }        public void displayName(){        System.out.println("水果的名字是:苹果");    }}

四:定义一个苹果类解析器:

package com.annotations.test2;import java.lang.reflect.Field;/** * 注解处理器 * @author 贾丽敏 * */public class FruitInfoUtil {    public static void getFruitInfo(Class<?> clazz){                String strFruitName=" 水果名称:";        String strFruitColor=" 水果颜色:";                Field[] fields = clazz.getDeclaredFields();                for(Field field :fields){            if(field.isAnnotationPresent(FruitName.class)){                FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);                strFruitName=strFruitName+fruitName.value();                System.out.println(strFruitName);            }            else if(field.isAnnotationPresent(FruitColor.class)){                FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);                strFruitColor=strFruitColor+fruitColor.fruitColor().toString();                System.out.println(strFruitColor);            }        }    }}

五:最后是我们的客户端:


package com.annotations.test2;/** * 测试结果 * @author 贾丽敏 * */public class FruitRun {    /**     * @param args     */    public static void main(String[] args) {                FruitInfoUtil.getFruitInfo(Apple.class);            }}
执行结果为:


以上是一个自定义的注解,有兴趣动手敲敲(*^__^*) 




原创粉丝点击