package com.Howard.test04;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 自定义注解类 * 但是必须要加上元注解 * @Retention(RetentionPolicy.RUNTIME)元注解 * @Target设定该注解的使用的目标 可以是方法或类等,也可以多个 * @author Howard * 2017年2月19日 */@Retention(RetentionPolicy.RUNTIME)@Target(value={ElementType.METHOD,ElementType.TYPE})public @interface myAnnotation { //属性 @myAnnotation(xxx="yyy") //如果各个属性都没默认值 那么使用该注解必须注明所有属性的值 //如果有默认值的 可以不注明 注明则覆盖默认值 //如果属性是value的,并且只有这个属性或者其它属性有默认值不另赋值,那么vlue这个属性在注明的 //时候可以简单写为@myAnnotation("red") String color() default "red"; String value(); int[] attr() default {1,2,3}; //属性也是一个注解 mataAnnotation也是一个自定义注解 mataAnnotation mataAnnotation() default @mataAnnotation("aaa");}package com.Howard.test04;/** * @author Howard * 2017年2月19日 */public @interface mataAnnotation { String value();}测试类:package com.Howard.test04;/** * 测试java注解 * @author Howard * 2017年2月19日 */@myAnnotation(value="abc",attr={3,4,5},mataAnnotation=@mataAnnotation("bbb"))public class AnnotationTest { @SuppressWarnings("deprecation") public static void main(String[] args) { //该方法已经过时 在方法上加注解@SuppressWarnings("deprecation")可以取消黄色提醒 System.runFinalizersOnExit(false); //过时 method1(); //检测是该类否有注解 if(AnnotationTest.class.isAnnotationPresent(myAnnotation.class)){ myAnnotation annotation = AnnotationTest.class.getAnnotation(myAnnotation.class); //该注解类必须有元注解才可以 //@com.Howard.test04.myAnnotation() System.out.println(annotation); //获取注解的属性值 System.out.println(annotation.color()); System.out.println(annotation.value()); System.out.println(annotation.attr().length); System.out.println(annotation.mataAnnotation().value()); } } @Deprecated public static void method1(){ //java为了可以向下兼容使用以前版本的jdk用户,并不会删除过时的方法,仅提醒而已 System.out.println("已经过时的方法,加注解就变成过时的方法"); }}运行结果:
新闻热点
疑难解答