java之注解及自定义注解例程
2013-01-07 01:15
531 查看
package annotation1; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * 注解 * * 注解的使用构成: 1,注解的申明 2,在类型(代码)上面打上注解 3,第三方的程序在使用打了注解的类型 * * 作业:自己设计一套文档标签,如果我在一个类上面加了这些标签,我把这个类作为参数传给一个方法,就能为这个类的注释生成一个API文档文件 * * @author Administrator * */ public class AnnotationDemo { /** * 使用Annotation(使用反射来得到标签实例) <A extends Annotation> A getAnnotation(Class<A> * annotationClass):得到指定类型的注解实例 Annotation[] getAnnotations():得到该类型上面的所有注释实例 * Annotation[] getDeclaredAnnotations() :返回直接存在于此元素上的所有注释。 boolean * isAnnotation() : 该类型是否是一个标签类型(Class) boolean isAnnotationPresent(Class<? * extends Annotation> annotationClass) :判断该类型上面是否有指定的标签类型 * * @param args */ public static void main(String[] args) throws Exception { Class<User> c = User.class; // 说明:annotation也是一种类型 // Class a=MyAnn.class; if (c.isAnnotationPresent(MyAnn.class)) { System.out.println("hello"); MyAnn ann = c.getAnnotation(MyAnn.class); System.out.println(ann.name()); System.out.println(Arrays.toString(ann.names())); System.out.println(ann.resetDay()); OtherAnn other = ann.other(); System.out.println("other " + other.value()); } else { System.out.println("fck"); } Method m = c.getDeclaredMethod("getName"); if (m.isAnnotationPresent(MyAnn.class)) { System.out.println("方法上面有标签"); } } /** * @SuppressWanings:去掉警告,(去掉警告的类型写在后面括号里面) 标签有自己定义的能放置的位置 */ @SuppressWarnings(value = "deprecation") public void dateTest() { Date d = new Date(); System.out.println(d.toLocaleString()); AnnotationDemo dd = new AnnotationDemo(); dd.someThing(); } /** * 标签里面可以有值, 1,一个常量值 2,一个数组 * * @Deprecated:方法过时 */ @SuppressWarnings({ "rawtypes", "unused" }) @Deprecated public void someThing() { List a = new ArrayList(); } /** * 注释一个标签。这个标签没有参数值 * * @Override:代表当前方法是覆盖一个父类的方法 */ @Override() public String toString() { return super.toString(); } } package annotation2; import java.lang.annotation.ElementType; /** * 自定义一个注释 * @author Administrator * * @Retention:规定定义的这个标签保留到什么时候 * @Target:规定定义的这个标签能加载哪些位置 * ANNOTATION_TYPE:标签上面 * Constructor:构造器上面 * Field:字段 * Local variable:局部变量 * METHOD:方法/方法的返回类型 * PACKAGE:包 * Parmater:方法参数 * TYPE:类/接口/枚举 */ @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnn { /** * 在标签里面加参数 类型 属性名称() [default 类型的值] * 注意:如果在标签里面仅有value这个属性要填,在使用的时候就可以忽略不写 */ String name() default "itcast"; String[] names() default {}; String value(); WeekDays resetDay(); OtherAnn other(); } package annotation3; public @interface OtherAnn { String value(); }
相关文章推荐
- 深入理解Java:注解(Annotation)自定义注解入门
- Java 自定义注解实现springMVC 参数校验非空判断,为空 则返回响应为空信息
- 深入理解Java:注解(Annotation)自定义注解入门
- java自定义注解
- Java自定义注解
- Java 自定义注解Annotation
- Java自定义注解
- 深入理解Java:注解(Annotation)自定义注解入门
- 深入理解Java:注解(Annotation)自定义注解入门
- java 自定义注解annotation和通过反射获取注解
- Java自定义注解及使用
- Java注解-----之自定义注解基础
- java中的注解以及自定义注解
- Java自定义注解小结
- 详解Java注解教程及自定义注解
- Java 自定义注解以及注解解析器
- Java自定义注解和运行时靠反射获取注解
- 深入理解Java:注解(Annotation)自定义注解入门
- java自定义注解
- 深入理解Java:注解(Annotation)自定义注解入门