美文网首页
注解 - 标记注解、单成员注解、内置注解

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

作者: 平头哥2015 | 来源:发表于2018-12-04 19:11 被阅读0次

标记注解

标记注解不包含成员,它存在的唯一目的就是标记声明。可以使用由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用于指定能抑制一个或多个编译器可能会报告的警告,以字符串形式表示的名称来指定要被抑制的警告。

相关文章

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

    标记注解 标记注解不包含成员,它存在的唯一目的就是标记声明。可以使用由AnnotatedElement接口定义的i...

  • java注解与反射,泛型与反射

    一、反射与注解 内置注解 java内置了3种注解,用来为编译器提供检查。 自定义注解 元注解 元注解是用来修饰注解...

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • java.lang.Annotation源码学习

    元注解 元注解就是标记其他注解的注解,包括:@Documented,@Inherited,@Repeatable,...

  • 并发模拟

    自定义注解标记属性 用于标记【线程安全】注解类。 用于标记【线程不安全】注解类。 用于标记【推荐】注解类。 用于标...

  • Java注解(三)—元注解

    元注解就是注解的注解,是Java内置的注解。Java提供四个元注解:@Retention @Target @Doc...

  • Java-Java注解(Annotation)

    一.内置注解 1.元注解(用于修饰注解定义) 2.原生注解 二.自定义注解(例) 1.定义注解 2.使用注解 3....

  • Java注解通俗易懂

    注解 可以被程序识别的注释 1.1 元注解 1.2 内置注解 1.3 自定义注解

  • 基础4-高级-注解

    JDK内置注解 自定义注解

  • 2016.10.13-关于注解的自定义和注解的解析

    注解可以分为:1、标识性注解(没有成员变量) 2、注解 3、元注解(注解的注解) 1、注解的自定义 自定义注解的格...

网友评论

      本文标题:注解 - 标记注解、单成员注解、内置注解

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