注解 - 标记注解、单成员注解、内置注解

标记注解

标记注解不包含成员,它存在的唯一目的就是标记声明。可以使用由AnnotatedElement接口定义的isAnnotationPresent()方法确定标记注解是否存在。

例子

@Retention(RetentionPolicy.RUNTIME)
public @interface MarkerAnno {
}

public class MarkerTest {

    @MarkerAnno
    public static void test() {
        MarkerTest mt = new MarkerTest();

        try {
            Method m = mt.getClass().getMethod("test");

            if (m.isAnnotationPresent(MarkerAnno.class)) {
                System.out.println("MarkerAnno is present.");
            }
        } catch (NoSuchMethodException e) {
            System.out.println("Method Not Found.");
        }
    }

}

注意:应用标记注解的时候注解后面不需要有圆括号。


单成员注解

单成员注解只包含一个成员,且如果成员的名称是value,就可以使用缩写形式,即在指定成员值的时候不需要指定成员名称。

例子

@Retention(RetentionPolicy.RUNTIME)
public @interface SingleAnno {

    int value();

}

public class SingleTest {

    @SingleAnno(100)
    public static void test() {
        // ...
    }

}

注意:当注解含有多个成员的时候,也可以使用单成员语法,但是其它成员必须有默认值,且没有为其它成员指定值。


内置注解

Java提供了许多内置注解,大部分是专用注解,但是有9个用于一般目的。这9个注解中,有4个来自java.lang.annotation包,分别是@Retention、@Documented、@Target和@Inherited;另外5个来自java.lang包,分别是@Override、@Deprecated、@FunctionalInterface、@SafeVarargs和@SuppressWarnings。

@Retention

@Retention只能用于注解其它注解,指定注解的保留策略。

@Documented

@Documented是标记注解,只能用于注解其它注解,通知某个工具注解将被文档化。

@Target

@Target只能用于注解其它注解,指定可以应用注解的声明的类型。@Target只有一个用于指定声明类型的参数,这个参数必须是来自ElementType枚举的常量。

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}

@Target可以指定这些值的一个或多个,例如:

@Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE})

@Inherited

@Inherited是标记注解,只能影响用于类声明的注解。@Inherited会使得父类的注解被子类继承。当获取子类的特定注解时,如果那种注解在子类中不存在,就会检查父类。如果那种注解存在于父类中,并且使用@Inherited进行了注解,就会返回那种注解。

@Override

@Override是标记注解,只能用于方法。带有@Override注解的方法必须重写父类中的方法。如果不这样做就会产生编译错误,从而确保父类的方法被真正的重写,而不是简单地重载。

@Deprecated

@Deprecated是标记注解,用于指示声明是过时的,并且已经被更新的形式取代。

@FunctionalInterface

@FunctionalInterface是JDK 8新加的一个标记注解,用于接口,指出被注解的接口是一个函数式接口。函数式接口是指仅包含一个抽象方法的接口,由lambda表达式使用。

@SafeVarargs

@SafeVarargs是标记注解,只能用于varargs方法或者声明为static或final的构造函数,指示没有发生与可变长度参数相关的不安全动作。

@SuppressWarnings

@SuppressWarnings用于指定能抑制一个或多个编译器可能会报告的警告,以字符串形式表示的名称来指定要被抑制的警告。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和...
    九尾喵的薛定谔阅读 3,161评论 0 2
  • 看到这边解释注解的博客非常好。放一下原版链接。进行了一些简化。 Annotation 中文译过来就是注解、标释的意...
    春天的蜜蜂阅读 931评论 0 0
  • 1 有个人,很谢谢你,认识你我觉得很幸运。 认识的你总是会讲给我一些学习的方法、或是人生的规划。让常常处于迷茫的我...
    巷西阅读 301评论 0 1
  • 2017年4月11日 星期二 时间:十二点到十二点半 地点:家中 今天我熬的小米粥有点稠,两个菜豆角炒鸡蛋和白菜炒...
    睿哲妈阅读 294评论 2 0