@Retention(RetentionPolicy.RUNTIME)//@Retention元注释 说明该注释 存活期间在 运行期间
@Target( {ElementType.TYPE,ElementType.METHOD})//@Target元注释 说明该注释 适用于 类接口枚举和方法上
public @interface myAnnotation {
//为注释定义属性
String name() default "ztt";//default定义属性默认值 缺省值
String value();
//数组类型 属性
int[] array() default {1,3,5};
//枚举类型属性
TrafficLamp lamp() default TrafficLamp.GREE;//独立的枚举
EnumDemo.TrafficLamp TLamp() default EnumDemo.TrafficLamp.GREE;//从属于类的枚举
//注释类型属性
annFormy ann() default @annFormy("hehe");
//class对象类型属性
Class<?> clazz() default String.class;
//Class<String> clazz() default String.class; 区别在于 该class对象 只能表示 String类(String的class对象)
}测试
@myAnnotation(name = "flx", value = "ggo",array={1,2},lamp=TrafficLamp.GREE,ann=@annFormy("annotation"),clazz=int.class)//小括号 括起来 注释的属性
public class annotationTest {
@myAnnotation(name = "hxl", value = "ggo",array={1,2},clazz=int.class)//小括号 括起来 注释的属性
@SuppressWarnings("deprecation")
public static void main(String[] args) {
// TODO Auto-generated method stub
System.runFinalizersOnExit(true);
//通过 反射 获取 注释对象
myAnnotation myann = annotationTest.class.getAnnotation(myAnnotation.class);
System.out.println(myann.name());
System.out.println(myann.value());
System.out.println(myann.array().length);
System.out.println(myann.lamp().next().name());
System.out.println(myann.ann().value());
System.out.println(myann.clazz().getName());
//将2进制数10000转为10进制数 16 将radix进制数string转为10进制数 (返回int)
System.out.println(Integer.parseInt("10000", 2));//16
System.out.println(Integer.toBinaryString(2));//16
}
}本文出自 “要么拼命,要么滚回去!” 博客,请务必保留此出处http://jiangzuun2014.blog.51cto.com/8732469/1533991
原文:http://jiangzuun2014.blog.51cto.com/8732469/1533991