Java-了解注解及其应用
- - BlogJava-qileilove 注解就是一种标记,在程序中加了注解就等于加了标记,没加,就没有标记. java编译器、开发工具或是其他程序可以通过反射技术了解你的类或各种元素是否有标记,有什么标记就做什么. 比如:子类重写父类的方法,方法上必须有@override标记;若一个方法已过时不用了,就该方法添加注. 解@Deprecated,调用者反射时就明白这方法已过时.
/** * 自定义注解类 * @author Administrator * */ public @interface AnimTest { } |
package com.itcast.test; import com.itcast.zhujie.AnimTest; @AnimTest //这是自定义的注解 public class ZhujieTest { /** * @param args */ public static void main(String[] args) { boolean isAnim = ZhujieTest.class.isAnnotationPresent(AnimTest.class); if(isAnim) System.out.println("it has one"); else System.out.println("no have"); } } |
/** * 自定义注解类 * @author Administrator * */ @Retention(value = RetentionPolicy.RUNTIME) //表示运行时也保留该注解类 public @interface AnimTest { } |
/** * 自定义注解类 * @author Administrator * */ @Retention(value = RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD}) //限定范围,作用于方法 public @interface AnimTest { } |
public class ZhujieTest { /** * @param args */ @AnimTest //作用于方法上 public static void main(String[] args) { boolean isAnim = ZhujieTest.class.isAnnotationPresent(AnimTest.class); if(isAnim) System.out.println("it has one"); else System.out.println("no have"); } } |
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import com.itcast.classdemo.WeekDay; /** * 自定义注解类 * @author Administrator * */ @Retention(value = RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD,ElementType.TYPE,ElementType.ANNOTATION_TYPE}) public @interface AnimTest { String color(); //字符串 int count(); //整型 int[] arr(); //数组 MetaAnnotation meta() default @MetaAnnotation("very food"); //注释类型 WeekDay day() default WeekDay.MON; //枚举类型 } //注释类 public @interface MetaAnnotation { String value() default "heollo"; //提供默认值 } //枚举类 public enum WeekDay { SUN,MON } |
import com.itcast.zhujie.AnimTest; @AnimTest (color ="red",count =1,arr=234) //这是自定义的注解,并为其属性赋值 public class ZhujieTest { /** * @param args */ @AnimTest (color ="blue",count=2,arr={3,21}) public static void main(String[] args) { //是否含有AnimTest注释标记 boolean isAnim = ZhujieTest.class.isAnnotationPresent(AnimTest.class); if(isAnim){ //获取AnimTest注释标记对象 AnimTest an = ZhujieTest.class.getAnnotation(AnimTest.class); //以下都是获取AnimTest注释标记对象的属性 System.out.println(an.color()); // red System.out.println(an.count()); //1 System.out.println(Arrays.toString(an.arr())); //[234] System.out.println(an.meta().value()); //very good System.out.println(an.day()); //MON System.out.println("it has one"); }else System.out.println("no have"); } } |