@interface自定义注解的语法

2020-01-18  本文已影响0人  夏_8a64

自定义注解:使用@interface自定义注解时,自动继承了java.lang.annotation接口,由编译程序自动完成其他细节。

                      在定义注解时,不能继承其他的注解或接口。

@interface 用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就

是参数的类型(返回值类型只能是基本类型、class、String、enum)。

定义注解格式: public @interface 注解名 {定义体}

注解参数的可支持数据类型:

    1、八种基本数据类型(byte,short,int,long,float,double,char,boolean)

    2、String类型

    3、enum类型

    4、Annotation类型

    5、Class类型

    6、以上所有类型的数组

    Annotation类型里面的参数该怎么设定:

    第一、只能用public或默认(default)这个两个访问权修饰,例如,String value();这里把方法设为default默认类型;

    第二、参数成员只能用基本类型byte,short,int,long,char,float,double,boolean八种基本数据类型和String,enum,class,annotation等数据类型,

                已经这些类型的数组。例如,String value();这里的参数成员就为String;

    第三、如果只有一个参数成员,最好把参数名称设为“value”,后加小括号

实例:

                        package annotation;

                        import java.lang.annotation.Documented;

                        import java.lang.annotation.ElementType;

                        import java.lang.annotation.Retention;

                        import java.lang.annotation.RetentionPolicy;

                        import java.lang.annotation.Target;

                        /**

                        * 水果名称注解

                        * @author peida

                        *

                        */

                        @Target(ElementType.FIELD)

                        @Retention(RetentionPolicy.RUNTIME)

                        @Documented

                        public @interface FruitName {

                                String value() default "";

                           }

    注解元素的默认值:

  注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null。因此, 使用空字符串或0作为默认值是一种常用的做法。这个约束使得处理器很难表现一个元素的存在或缺失的状态,因为每个注解的声明中,所有元素都存在,并且都具有相应的值,为了绕开这个约束,我们只能定义一些特殊的值,例如空字符串或者负数,一次表示某个元素不存在,在定义注解时,这已经成为一个习惯用法。例如:

package annotation;

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* 水果供应者注解

* @author peida

*

*/

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitProvider {

    /**

    * 供应商编号

    * @return

    */

    public int id() default -1;

    /**

    * 供应商名称

    * @return

    */

    public String name() default "";

    /**

    * 供应商地址

    * @return

    */

    public String address() default "";

}

上一篇 下一篇

猜你喜欢

热点阅读