定义注解:元素与默认值
使用 @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 反馈 — 无需本地设置。