0Pricing
Java Academy · 课时

定义注解:元素与默认值

使用 @interface 创建自定义注解,使用默认值定义元素,并应用元注解

定义注解:元素与默认值 是 CoddyKit 上的免费 Java Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。

什么是注解

注解是应用于类、方法、字段或参数的元数据。它们不会直接改变行为,而是向编译器、框架或运行时处理器提供信息。

使用 @interface 声明注解

使用 @interface 声明自定义注解。注解元素看起来像方法。使用 default 指定默认值。

@interface Retry {
    int times()      default 3;
    long delayMs()   default 1000L;
    Class<? extends Throwable>[] on() default {Exception.class};
}

应用注解

将注解应用于目标。具有默认值的元素可以省略。如果只有一个名为 value 的元素,可以不写键名直接设置它。

@Retry(times = 5, delayMs = 500)
public void callExternalService() { ... }

// Single-element shorthand:
@interface Label { String value(); }
@Label("production")
public class App {}

注解元素类型

元素只能是:基本类型(int、long 等)、String、Class、枚举、另一种注解类型,或上述类型的一维数组。

@interface Config {
    String   host();
    int      port()      default 8080;
    LogLevel level()     default LogLevel.INFO;  // enum
    Class<?> handler()   default DefaultHandler.class;
    String[] tags()      default {};
}

元注解:@Retention

@Retention 控制注解的保留时长:SOURCE(由编译器丢弃)、CLASS(保存在 .class 中,但不在运行时保留)、RUNTIME(可通过反射读取)。

@Retention(RetentionPolicy.RUNTIME)
@interface Retry {
    int times() default 3;
}

元注解:@Target

@Target 限制注解可以应用的位置。可以列出多个目标。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Audited {
    String description() default "";
}

@Documented 和 @Inherited

@Documented 会将注解包含在 Javadoc 中。@Inherited 允许子类从父类继承注解(仅适用于类级别的注解)。

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Category {
    String value();
}

@Repeatable 注解

为注解添加 @Repeatable,即可允许它在同一个元素上出现多次。请提供一个包含数组的容器注解。

@Repeatable(Tags.class)
@interface Tag { String value(); }
@interface Tags { Tag[] value(); }

@Tag("fast")
@Tag("stable")
public class Service {}

默认值与省略元素

具有 default 值的元素无需在调用位置指定。没有默认值的元素是必填的。

@Retry                  // uses defaults: times=3, delayMs=1000
public void action1() {}
@Retry(times=1)         // overrides only times; delayMs stays 1000
public void action2() {}

注解与标记接口

标记接口(例如 Serializable)通过 instanceof 检查,并传达类型信息。注解更加灵活:它们携带元数据,并且可以包含元素。

常见的内置注解

请了解 JDK 注解:@Override、@Deprecated、@FunctionalInterface、@SuppressWarnings 和 @SafeVarargs。

@Override
public String toString() { return "User{" + name + "}"; }
@Deprecated(since = "2.0", forRemoval = true)
public void oldMethod() {}

快速检查

哪一种保留策略是唯一能让注解在运行时可读的策略?

回顾

使用 @interface 声明注解。使用 @Retention(RUNTIME) 进行反射处理,使用 @Target 限制使用范围,使用 default 定义可选元素。@Repeatable 允许叠加注解。

常见问题解答

「定义注解:元素与默认值」课时是免费的吗?

是的 — 「定义注解:元素与默认值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。

「定义注解:元素与默认值」这节课中我会学到什么?

使用 @interface 创建自定义注解,使用默认值定义元素,并应用元注解 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Java Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「定义注解:元素与默认值」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Java Academy 课中编写并运行代码吗?

能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义注解:元素与默认值
  2. 保留策略与目标类型
  3. 运行时注解处理
  4. 编译时注解处理器
← 返回 Java Academy