为什么@FunctionalInterface具有运行时保留期?

2022-09-03 07:47:50

在Javadoc中说

如果某个类型是用此注释类型批注的,则编译器需要生成错误消息,除非...

为什么不够或不够,比如.SOURCECLASS@Override


答案 1

批注有两个用途。关于编译器和它必须生成的错误,它确实足以拥有一个,因为在这方面它只影响用 注释的类。@FunctionalInterfaceSOURCERetentionPolicy@FunctionalInterface

但是,它有第二个目的,记录了将其用作功能接口的事实,以及以这种方式使用它的可能性,而不仅仅是巧合,例如 它不打算以这种方式使用。interfaceComparable

因此,它被注释并具有实现第二个目的的最大值。@DocumentedRetentionPolicy


答案 2

“源”是不够的,因为例如,如果您创建一个API并将您的类作为预编译的jar提供,则该信息将不再可用于编译器。

我相信,如果你想支持那些在运行时对类“编译”的编译器,比如使用反射来查找这些注释的脚本引擎,并且也应该显示警告,那么“class”也是不够的。


推荐