- package cd.itcast.day2;
- 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 cd.itcast.day2;
- 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 cd.itcast.day2;
- public @interface OtherAnn {
- String value();
- }
浙公网安备 33010602011771号