java-注解

注解分类

源码注解:注解只在源码中存在,在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-注解)