美文网首页
java-注解

java-注解

作者: EvilsoulM | 来源:发表于2015-11-29 23:31 被阅读96次

注解分类

源码注解:注解只在源码中存在,在class中就不存在了
编译时注解:注解在源码和class文件中都存在
运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解

自定义注解

/****元注解****/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
/****************/
public @interface Description {
    String desc();//成员变量 无参数无异常的方式声明
    String author();
    int age() default 18;//设置默认值
}

成员类型包含基本类型,String,Class,Annotation,Enumeration

如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)

元注解

@Target 作用域
CONSTRUCTOR 构造方法声明
FIELD字段声明
LOCAL_VARIABLE局部变量声明
METHOD方法声明
PACKAGE包声明
PARAMETER参数声明
TYPE类,接口

@Retention 生命周期(注解分类)
SOURCE
CLASS
RUNTIME

@Inherited 容许子类继承

@Documented 生成javadoc时会包含注解

解析注解

public static void main(String[] args) {
    try {
        Class c = Class.forName("com.evilsoulm.anotationdemo.MainActivity");
        //找到类上的注解        boolean isExist = c.isAnnotationPresent(Description.class);
        if (isExist) {
            //拿到注解实例
            Description d = (Description) c.getAnnotation(Description.class);
            System.out.println("descrition:" + d.desc());
        }
        Method[] ms = c.getMethods();
        for (Method m : ms) {
            boolean isMethodExist = m.isAnnotationPresent(Description.class);
            if (isMethodExist) {
                //拿到注解实例                Description d = m.getAnnotation(Description.class);
                System.out.println("descrition:" + d.desc());
            }
        }
        //解析方式2
        for (Method m : ms) {
            Annotation[] as = m.getAnnotations();
            for (Annotation a : as) {
                if (a instanceof Description) {
                    Description d = (Description) a;
                    System.out.println("descrition:" + d.desc());
                }
            }
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
@Description(desc = "EvilsoulM")
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }
    @Description(desc = "i am eyeColor", age = 24)
    public void eyeColor() {
    }
}
descrition:EvilsoulM
descrition:i am eyeColor
descrition:i am eyeColor

eg:http://knight-black-bob.iteye.com/blog/2229834

相关文章

  • JAVA-注解 Annotation

    JAVA-注解 Annotation sschrodinger 2018/6/4 基本 注解 Java 注解用于为...

  • Java-注解

    主要知识点 Annotation和class interface等java关键字一样,提供注解的定义,所有自定义注...

  • java-注解

    注解分类: 源码注解,编译注解,运行注解 源码注解:编译后的.class 后没有 boolean exists =...

  • Java-注解

    元注解 元注解的作用就是负责注解其他注解。 Java5.0定义了4个标准的meta-annotation类型,它们...

  • java-注解

    注解分类 源码注解:注解只在源码中存在,在class中就不存在了编译时注解:注解在源码和class文件中都存在运行...

  • java-注解

    每当创建描述符性质的类或接口时,一旦其中包含了重复性的工作,那就可以考虑使用注解来简化与自动化该过程。 java ...

  • Java-注解

    一、JDK自带注解 我们最常见的就是@Override,表示方法重写,覆盖父元素的该方法。 除此之外还有Depre...

  • java-注解

    注解的概念 注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Me...

  • Java-注解Annotation

    1 注解的写法 2 注解放在哪里? 类的上面,属性上面,方法上面,构造方法上面,参数前面 3. 注解的作用 用来充...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

网友评论

      本文标题:java-注解

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