注解属性的类型

本文详细介绍了Java中注解的使用方法,包括注解的作用目标、属性及其类型,并通过实例展示了如何定义和应用注解。
package demo.annotation;

/**
 * 枚举类
 */
enum MyEnum1 {
    A, B, C
}

/**
 * 学习顺序:
 * 注解的作用目标
 * 注解的属性
 * 注解属性的类型
 * 注解的作用目标限定
 * 注解的保留策略限定
 */
//定义注解
@interface MyAnno5 {
    int a();

    String b();

    MyEnum1 c();

    Class d();

    MyAnno6 e();

    int[] f();

    String[] g();
}

/**
 * 注解属性的类型
 * > 8种基本类型 byte、short、int、long、float、double、char、boolean
 * > String
 * > Enum
 * > Class
 * > 注解类型
 * > 以上类型的一维数组类型
 */
@interface MyAnno6 {
    int aa();

    String bb();
}

//在类上使用注解
@MyAnno5(
        a = 100,
        b = "hello",
        c = MyEnum1.A,
        d = String.class,
        e = @MyAnno6(aa = 200, bb = "world"),
        f = 100,//数组元素的个数为1时,可以省略大括号
        g = {"", ""}
)
public class 注解属性的类型 {

}

注解属性是 Java 注解的重要组成部分,为注解提供了参数化的能力,使得注解在不同场景下可以灵活配置和使用。以下是关于注解属性的详细介绍: ### 注解属性定义与赋值 使用注解时,需要给没有默认值的注解属性赋值,格式为`注解属性名称 = 对应类型属性值`。如果注解属性有默认值,则可以不进行显式赋值。例如: ```java // 定义注解 @interface MyAnnotation { String stringValue(); // 有默认值的注解属性 int intValue() default 0; } // 使用注解,给没有默认值的属性赋值 @MyAnnotation(stringValue = "example") class MyClass { // 类的内容 } ``` ### 注解属性类型 注解属性类型可以是多种,常见的类型包括基本数据类型(如`int`、`float`等)、字符串类型(`String`)、枚举类型注解类型、数组类型(基本数据类型数组、字符串数组等)。例如: ```java // 定义枚举类型 enum Number { ONE, TWO, THREE } // 定义注解,包含多种属性类型 @interface ComplexAnnotation { String stringValue(); int intValue(); Number enumValue(); String[] stringArrayValue(); } // 使用注解 @ComplexAnnotation( stringValue = "tom", intValue = 1, enumValue = Number.ONE, stringArrayValue = {"tom", "jerry"} ) class AnotherClass { // 类的内容 } ``` ### 注解属性赋值简化操作 当注解中只有一个属性属性名为`value`时,使用注解时可以省略属性名,直接赋值。例如: ```java // 定义注解 @interface SingleValueAnnotation { String value(); } // 使用注解,简化赋值 @SingleValueAnnotation("directValue") class SimpleClass { // 类的内容 } ``` ### 注解属性默认值 为注解属性设置默认值可以提高注解使用的灵活性。如果属性有默认值,在使用注解时可以不指定该属性的值,此时将使用默认值。例如: ```java // 定义注解属性有默认值 @interface DefaultValueAnnotation { String message() default "default message"; } // 使用注解,不指定有默认值的属性 @DefaultValueAnnotation class DefaultClass { // 类的内容 } ``` ### 注解属性的反射获取 通过反射机制可以在运行时获取注解及其属性的值。例如: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Field; // 定义注解 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @interface Banana { String length(); String price(); } class Fruit { @Banana(length = "10cm", price = "5 dollars") private String banana; } public class AnnotationReflectionExample { public static void main(String[] args) throws NoSuchFieldException { Field field = Fruit.class.getDeclaredField("banana"); if (field.isAnnotationPresent(Banana.class)) { Banana bananaAnnotation = field.getAnnotation(Banana.class); System.out.println("Length: " + bananaAnnotation.length()); System.out.println("Price: " + bananaAnnotation.price()); } } } ``` ### 常见注解属性介绍 以`@Cacheable`注解为例,它共有 9 个属性供使用,分别是`value`、`cacheNames`、`key`、`keyGenerator`、`cacheManager`、`cacheResolver`、`condition`、`unless`、`sync`。这些属性用于配置缓存的相关行为,如缓存名称、缓存键生成策略、缓存条件等[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值