Java的注解总结

来源:互联网 发布:查看淘宝关键词搜索量 编辑:程序博客网 时间:2024/05/18 20:45

注解的知识结构图(别人总结的)





一个注解demo,分别定义3个注解

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;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface VehicleName {String value() default "";}

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;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface VehicleColor {public enum VColor{RED,BLUE,GREEN,BLACK}VColor vehicleColor() default VColor.BLACK;}

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;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface VehicleProvider {public int id() default -1;public String name() default "";public String phone() default "";}


使用注解的类

import ww.VehicleColor.VColor;public class Bicycle {@VehicleName("捷安特")private String bicycleName;@VehicleColor(vehicleColor=VColor.BLUE)private String bicycleColor;@VehicleProvider(id=101,name="Vehicle Store",phone="123456")private String vehicleProvider;public String getBicycleName() {return bicycleName;}public void setBicycleName(String bicycleName) {this.bicycleName = bicycleName;}public String getBicycleColor() {return bicycleColor;}public void setBicycleColor(String bicycleColor) {this.bicycleColor = bicycleColor;}public String getVehicleProvider() {return vehicleProvider;}public void setVehicleProvider(String vehicleProvider) {this.vehicleProvider = vehicleProvider;}}


注解处理器

import java.lang.reflect.Field;public class VehicleInfoUtil {public static void getVehicleInfo(Class<?> clazz){String vehicleName = "vehicle name:";String vehicleColor = "vehicle color:";String vehicleProvider = "vehicle Provider:";// 返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。Field[] fields = clazz.getDeclaredFields();for(Field field:fields){// 判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.if(field.isAnnotationPresent(VehicleName.class)){VehicleName name = (VehicleName)field.getAnnotation(VehicleName.class);vehicleName = vehicleName + name.value();System.out.println(vehicleName);}else if(field.isAnnotationPresent(VehicleColor.class)){VehicleColor color = (VehicleColor)field.getAnnotation(VehicleColor.class);vehicleColor = vehicleColor + color.vehicleColor().toString();System.out.println(vehicleColor);}else if(field.isAnnotationPresent(VehicleProvider.class)){VehicleProvider provider = (VehicleProvider)field.getAnnotation(VehicleProvider.class);vehicleProvider = vehicleProvider + "Id:"+provider.id()+" Name:"+provider.name()+" Phone:"+provider.phone() ;System.out.println(vehicleProvider);}}}}

执行类

public class VehicleApp {/** * @param args */public static void main(String[] args) {VehicleInfoUtil.getVehicleInfo(Bicycle.class);}}




0 0
原创粉丝点击