Java中自定义无参数注解只需用public @interface声明空接口,配合@Target和@Retention等元注解限定作用范围与生命周期,使用时直接标注目标元素,运行时通过isAnnotationPresent()判断是否存在。

<p>Java中自定义无参数注解的声明非常简单,直接使用 <strong>@interface</strong> 关键字即可,不需要任何方法声明(即不写任何抽象方法),它就是一个“标记型注解”。</p>
<H3>基本语法:最简形式</H3>
<p>无参数注解本质上是只起标识作用的注解,不携带任何属性值。定义时只需:</p>
<ul>
<li>用 <strong>public @interface</strong> 开头(建议加 <strong>public</strong> 保证可见性)</li>
<li>类名首字母大写,符合命名规范(如 <strong>MyAnnotation</strong>)</li>
<li>花括号内留空 —— 不声明任何方法(包括 <strong>value()</strong>)</li>
</ul>
<p>示例:</p>
<pre><code>public @interface MyAnnotation {
// 空的,不写任何内容
}</code></pre>
<H3>补充:加上元注解更实用</H3>
<p>单独定义注解还不够,通常需要配合元注解(meta-annotation)指定其作用范围和生命周期。常见组合如下:</p>
<ul>
<li><strong>@Target(ElementType.METHOD)</strong>:限定只能用于方法上</li>
<li><strong>@Retention(RetentionPolicy.RUNTIME)</strong>:确保运行时可通过反射读取</li>
<li><strong>@Documented</strong>(可选):让该注解出现在生成的JavaDoc中</li>
<li><strong>@Inherited</strong>(可选):允许子类继承父类上的该注解(仅对类有效)</li>
</ul>
<p>完整示例:</p>
<pre><code>import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
}</code></pre>
<H3>使用方式:直接标注即可</H3>
<p>因为没有参数,使用时无需括号或赋值,直接在目标元素前加 <strong>@MyAnnotation</strong>:</p>
<ul>
<li>标注方法:<code>@MyAnnotation public void doSomething() { ... }</code></li>
<li>标注类:<code>@MyAnnotation public class Service { ... }</code></li>
<li>标注字段、参数等(取决于 <strong>@Target</strong> 的设置)</li>
</ul>
<H3>运行时读取:靠反射判断是否存在</H3>
<p>由于没有参数,我们通常只关心“有没有被标注”,可用反射的 <strong>isAnnotationPresent()</strong> 判断:</p>
<pre><code>Method method = targetClass.getMethod("doSomething");
if (method.isAnnotationPresent(MyAnnotation.class)) {
System.out.println("该方法被 @MyAnnotation 标记了");
}</code></pre>
<p>也可用 <strong>getAnnotation()</strong> 获取注解实例(返回非 null 即表示存在)。</p>