java自定义注解详解

KLQ 2020-08-18 15:59:12 java常见问答 4786

下面要给大家讲到的是java自定义注解的内容,对于这方面你了解吗?下面的话就请通过下面的文章内容来进行了解吧。

如何自定义注解?

声明自定义注解使用@interface关键字(interface关键字前加@符号)实现,定义注解和定义接口很相似,下面的代码可定义一个简单形式的注解类型。

// 定义一个简单的注解类型
public @interface Test
{}

上面的代码声明了一个Test注解,早默认的情况之下,注解能够在程序的任何地方使用,通常的话用于修饰类、接口、方法和变量等。

定义注解和定义类类似,注解前面的访问修饰符和类一样有两种,分别是公有访问权限(public)和默认访问权限(默认不写),一个源程序文件当中,能够声明多个注解,但是,指可以有一个是公有访问权限的注解,并且,源程序文件命名和公有访问权限的注解名一致。

不包含任何成员变量的注解称为标记注解,例,上面声明的Test注解和基本注解中的@Override注解都属于标记注解,根据需要,注解中能够定义成员变量,成员变量以无形参的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型。

代码:

public @interface MyTag
{
    // 定义带两个成员变量的注解
    // 注解中的成员变量以方法的形式来定义
    String name();
    int age();
}

上面的代码当中,声明了一个MyTag注解,定义了两个成员变量,分别是name和age,成员变量也可以有访问权限修饰符,可是,只能有公有权限和默认权限。

假如,在注解里定义了成员变量,那么使用该注解的时候,就应该为它的成员变量指定值。

代码示例:

public class Test
{
    // 使用带成员变量的注解时,需要为成员变量赋值
    @MyTag(name = "xx", age = 6)
    public void info()
        {
            ...
        }
        ...
}

注解中的成员变量也可以有默认值,可使用default关键字,如下代码定义了@MyTag注解,该注解里包含了name和age两个成员变量。

public @interface MyTag
{
    // 定义了两个成员变量的注解
    // 使用default为两个成员变量指定初始值
    String name() default "C语言中文网";
    int age() default 7;
}

假如:为注解的成员变量指定了默认值,那么使用这个注解的时候,就能够不为这些成员变量赋值,而是直接使用默认值。

public class Test
{
    // 使用带成员变量的注解
    // MyTag注释的成员变量有默认值,所以可以不为它的成员变量赋值
    @MyTag
    public void info()
        {
            ...
        }
        ...
}

当然也可以在使用MyTag注解时为成员变量指定值,假如,为MyTag的成员变量指定了值,那么默认值不会起作用。

根据注解是否包含成员变量,可以分成(1)标记注解:没有定义成员变量的注解类型被称为标记注解,这种注解仅利用自身的存在与否来提供信息,如前面介绍的@Override、@Test等都是标记注解;(2)元数据注解:包含成员变量的注解,因为它们可以接受更多的元数据,所以也被称为元数据注解这两类。

以上的内容就给你介绍到这里了,更多java入门知识,请继续关注本站来进行了解吧。

推荐阅读:

java元注解作用及使用详解

java @FunctionalInterface注解详解

java @Override注解详解