如何在 Java 中指定应应用注释的字段类型?

How can I specify the type of the field that an Annotation should be applied to in Java?

我正在创建一个简单的注释,以帮助我在我的 Android 应用程序中扩充设置。注释是这样的:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CoreSettings {
    String name() default "";
}

我想确保它只会用于扩展名为 BaseSettings 的自定义 class 类型的字段。在下面的示例中,MainSettings 扩展了抽象 class BaseSettings.

public class MainActivity extends BaseActivity {

    @CoreSettings("prefs")
    MainSettings settings;


    (...)

}

我该怎么做?

是的,如果您在错误类型的字段上编写注释,可能会导致编译器发出错误消息。

您不能只使用 @Target 元注释来做到这一点。此外,您需要编写一个注解处理器。注释处理器将检查源代码中每次出现的注释 @CoreSettings,如果将 @CoreSettings 应用于不扩展 [=] 的类型,它会发出错误(就像任何其他编译器错误一样) 13=]。这是一个简短、易于编写的注释处理器。

您只会在 运行 注释处理器时收到编译时警告,但您可以在项目的构建文件中将 -processor ... 命令行参数添加到 javac。