美文网首页Java 杂谈
java:注解annotation

java:注解annotation

作者: GitCode8 | 来源:发表于2018-08-15 09:20 被阅读3次

现在人类越来越懒了,以前程序员是代码的搬运工,现在搬运工也不想当,总想着,造一些工具来自动搬运,减少频繁的复制和粘贴,让代码自动处理,从而出现优雅和灵活的编程方式。


图片来源于互联网,侵权删

注解的主要作用

  1. 用来生成描述文件
  2. 减轻编写“样板”代码负担

三种标准注解
@Overried:当前方法的定义将覆盖父类方法
@Deprecated:发出编译器警告
@SuppressWarnings:关闭不当的编译器警告

四种元注解
@Target():表示该注解可以用在什么地方。CONSTRUCTOR:构造器声明、FIELD:域声明、LOCAL_VARIABLE:局部变量声明、METHOD:方法声明、PACKAGE:包声明、PARAMETER参数声明、TYPE:类、接口、注解或者enum声明。在使用的过程中,可以用逗号隔开指定多个值,也可省去该注解,指定所有值,但在实际开发总,很少这样子。

@Retention():表示需要在什么级别保存该注解信息。SOURCE:注解将在编译器被丢弃、CLASS:注解在class文件可用,在JVM被丢弃、RUNMTIME:VM将在运行期保存该注解,因此可以通过反射机制读取注解信息。

@Document:将此注解包含在Javadoc中。

@Inherited:允许子类继承父类的注解。
定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Cat {

    public int id();
    
    public String description() default "no description";

}

注解的元素在使用时表现为名-值的形式,并需要至于@Cat括号内:

public class CatOne {
    
    @Cat(id=100)
    public String catId(){
        return "2k3k35l";
    }
    
    @Cat(id=100,description="miao~")
    public String catName() {
        return "miao";
    }

}

编写注解处理器工具,如果没有注解处理工具,那么注解也不会比注释更有用:

public class DealAnnotation {
    public static void main(String[] args) {

        findDemo(CatOne.class);
    }

    private static void findDemo(Class<?> cl) {
        for (Method m : cl.getDeclaredMethods()) {
            Cat annotation = m.getAnnotation(Cat.class);
            if (annotation != null) {
                System.out.println("id:" + annotation.id() + " description:"
                        + annotation.description());
            }
        }

    }

}

运行结果:

id:100 description:no description
id:100 description:miao~
  1. 如果在应用注解的时候,注解只有一个元素,且元素名为 value,可以省略key。
    @Dog("dog") private String name;
  2. 一个目标可以使用多个注解,但注解不能重复。

注解处理工具apt和单元测试感兴趣的可以了解一下。

java se7:
@SafeVarargs参数安全类型,提醒开发者不要用参数做一些不安全的操作

java se8 新增了:
@FunctionalInterface函数式接口注解,毕竟函数编程现在很火。
@Repeatable可重复的

本文是基于JAVA编程思想第四版的理解总结,基于java se5.如有偏差,欢迎指正。

相关文章

网友评论

    本文标题:java:注解annotation

    本文链接:https://www.haomeiwen.com/subject/hwzqbftx.html