注解之注解的属性

  • 注解的属性也叫作成员变量。注解只有成员变量,没有方法。
  • 注解的成员变量在注解的定义中以“无形参的方法”形式来声明
  • 其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。
  • 注解中属性能够有默认值,默认值须要用 default 关键值指定。
@interface AnnotationTest{
String value();
int sex() default 1;
}
// 注解中有多个属性,赋值的方式:括号内以 value="",多个属性以前用 ,隔开。

@AnnotationTest(value="3",sex=0)
public class Test {
}

有默认值且不想改值,无需在 @TestAnnotation 后的括号中为sex进行赋值了java

如一个注解内仅只有一个成员变量且名字为 value 的属性时,应用这个注解时可直接写属性值到括号内。数组

注解没有任何属性,括号均可以省略。spa

 自定义注解类编写的一些规则:code

  • 全部的Annotation会自动继承java.lang.annotation.Annotation,并不能继承别的类或是接口
  • 参数成员只能用public或默认(default)这两个访问权修饰
  •  参数成员只能用基本数据类型(char,boolean,byte、short、int、long、float、double)和String、Enum、Class、annotations数据类型,以及这一些类型的数组对象

  • 要获取类方法和字段的注解信息,必须经过Java的反射技术来获取 Annotation对象,除此以外没有别的获取注解对象的方法

 示例代码:blog

/**
 * 注解的属性
 * ★ 注解的属性也叫作成员变量。注解只有成员变量,没有方法。
 * ★ 注解的成员变量在注解的定义中以“无形参的方法”形式来声明,
 * 其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。
 * 注解中属性能够有默认值,默认值须要用 default 关键值指定。
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationField {
    String tableName();//注解的成员变量:无形参方法
    // 返回值是成员变量的类型,tableName是成员变量名称
    //默认值须要用 default 关键值指定
    //如下报错:
    //Integer flag Default 1;Default须要小写
    //Integer flag() default 1; 注解的成员变量在注解的定义中以“无形参的方法”形式来声明,因此须要使用flag()来声明
    //Integer flag() default 1;报错缘由是由于参数成员 变量只能使用基本的数据类型
    // (char,boolean,byte,short,int,float,double)和(String,Enum,Class,annotations)等这些数据类型,以及这一些类型的数组
    //不能使用包装类对象,由于其是一个应用类型并非一个基本数据类型
    //注解中全部的成员对象在使用注解时都须要被使用,除了default默认值之外
    //由于default值是默认的,咱们不须要写,使用注解时也知道这个值是多少
    int flag() default 1;
}
//当一个注解中只有一个注解属性且名为value,
// 那么在使用的时候能够直接使用@AnnotationTest1("tb_table")。
// 若果没有属性,括号也能够省略
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest1 {
    String value();
}
@AnnotationField(tableName = "tb_animal", flag = 0)//使用多个注解值,中间用,割开,若是不想使用默认值,能够在注解中为其从新赋值
@AnnotationTest1("tb_animal")
public class Animal {
    private String name;
    private String sex;
    private Integer age;
}
相关文章
相关标签/搜索