fge*_*fge 5 java annotations java-8
我最初的问题是这个问题的完全重复; 也就是说,为什么这个接口有一个运行时保留策略.
但是接受的答案根本不能满足我,原因有两个:
@Documented
(我相信)与它无关(虽然为什么@Documented
运行时保留策略对我来说也是一个谜);Comparable
正如答案所提到的那样,但也Runnable
等),这并不妨碍它们被用作"替代品"(例如,你可以完美地使用DirectoryStream.Filter
as作为例如,Predicate
如果您所做的只是过滤Path
,则替换为a .但是,它仍有这种保留.这意味着它必须以某种方式影响JVM行为.怎么样?
我在core-libs-dev邮件列表中找到了该线程,该线程讨论了@FunctionalInterface
批注的保留。此处提到的要点是允许第三方工具使用此信息进行代码分析/验证,并允许非Java JVM语言将其lambda正确映射到功能接口。一些摘录:
Joe Darcy(的原始提交者@FunctionalInterface
):
我们有意使此注释具有运行时保留时间,以使它也可以在运行时等各种工具中查询。
布莱恩·格茨
除Java之外的其他语言都有一个好处,可以将其用作确定接口是否适合传递给SAM转换机制的手段。JDK对lambda转换的支持也可用于其他语言。
看来JVM本身并没有使用它,这只是第三方工具的另一种可能性。使注释在运行时可见不是很大的代价,因此似乎没有充分的理由不这样做。
归档时间: |
|
查看次数: |
116 次 |
最近记录: |