为什么@FunctionalInterface具有RUNTIME保留?

aun*_*low 13 java java-8

在Javadoc中说:

如果使用此批注类型对类型进行批注,则编译器需要生成错误消息,除非......

为什么不是SOURCECLASS不够@Override.

Hol*_*ger 6

@FunctionalInterface批注有两个目的.关于编译器和它必须生成的错误,确实足以SOURCE RetentionPolicy在这方面有一个它只影响注释的类@FunctionalInterface.

然而,它有第二个目的,记录了这样interface一个事实,即使用它作为功​​能接口确实是有意的,并且以这种方式使用它的可能性不仅仅是巧合,例如Comparable不打算以这种方式使用.

因此,它具有注释@Documented并且具有最大化RetentionPolicy以实现第二目的.

  • @auntyellow:这并不是一项艰难的要求,但是,广泛提供信息的目的是得出结论:您通常*希望*最大保留.顺便说一句,`RetentionPolicy.CLASS`没有提供超过'RUNTIME`的任何优势.它在类文件中消耗相同的空间量,并且由于Reflection仅在需要时加载注释,因此在运行时内也没有任何好处. (2认同)