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

时间:2021-02-23 05:47:02


在上一篇博客《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)
@Documented
public @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)
@Documented
public @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);

}

}
执行结果为:

《java基础学习之——自定义注解》
以上是一个自定义的注解,有兴趣动手敲敲(*^__^*)