- @SuppressWarnings(value={"unchecked","fallthrough"})
- publicvoidlintTrap() {
- /*sloppy method body omitted */}
- @SuppressWarnings("unchecked")
- @SuppressWarnings("unchecked")
import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy;
/** * @ClassName: Author * @Description: TODO(定义描述信息 value ) * @author fujiansheng_58ganji * @date 2016年7月10日 下午3:57:15 * */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented public @interface Author { String name(); String group(); }
清单2:Description.java package annotation_project.annotations; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy;
/** * @ClassName: Description * @Description: TODO( 定义描述信息 value) * @author fujiansheng_58ganji * @date 2016年7月10日 下午3:57:05 * */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented public @interface Description { String value(); }
清单3:Utility.java package annotation_project.utils;
import annotation_project.annotations.Author; import annotation_project.annotations.Description;
/** * @ClassName: Utility * @Description: TODO( ) * @author fujiansheng_58ganji * @date 2016年7月10日 下午3:50:32 * */ @Description(value = "这是一个有用的工具类") public class Utility { @Author(name = "fjsh_666", group = "annotation_project.utils") public String work() { return "work over!"; } } 注:这是个普通的Java类,运行了@Description和@Author注解。
清单4:AnalysisAnnotation.java package annotation_project.annotationTest;
import java.lang.reflect.Method;
import annotation_project.annotations.Author; import annotation_project.annotations.Description;
/** * @ClassName: AnalysisAnnotation * @Description: TODO( 这是个与自定义@Description和@Author配套的基础框架或工具类,通过此类来获得与普通Java类Utility.java关联的信息,即描述和作者。 运行AnalysisAnnotation,输出结果为: Utility's Description--->这是一个有用的工具类 Utility's Author--->fjsh_666from annotation_project.utils) * @author fujiansheng_58ganji * @date 2016年7月10日 下午3:55:56 * */ public class AnalysisAnnotation { public static void main(String[] args) { try {// 通过运行时反射API获得annotation信息 Class rt_class = Class.forName("annotation_project.utils.Utility"); Method[] methods = rt_class.getMethods(); boolean flag = rt_class.isAnnotationPresent(Description.class); if (flag) { Description description = (Description) rt_class .getAnnotation(Description.class); System.out.println("Utility's Description--->" + description.value()); for (Method method : methods) { if (method.isAnnotationPresent(Author.class)) { Author author = (Author) method .getAnnotation(Author.class); System.out.println("Utility's Author--->" + author.name() + "from " + author.group()); } } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 注:这是个与自定义@Description和@Author配套的基础框架或工具类,通过此类来获得与普通Java类Utility.java关联的信息,即描述和作者。