如何在Java中强制使用常量

ret*_*dev 2 java interface constants

我正在使用JAX-RS来创建REST Web服务.

我需要公开访问@Path我的Resource类上的注释的值.使用反射来获得这个值似乎有点沉重.

我以为我会将值保存在a中public static final String,以便@Path注释和其他类都可以访问它.

要求Class提供此常量的最佳方法是什么?我的印象是在接口中使用常量是一种反模式(Effective Java 2nd Edition).

编辑:

正如有效Java所说:"如果常量与现有类或接口紧密相关,则应将它们添加到类或接口中".

在我的情况下,@Path接口的所有实现者都是一样的,接口将提供方法,所以我认为我可以安全地将常量添加到接口.

eis*_*eis 5

既然你已经有了这本书,我会为你引用它(第98-99页):

如果要输出含量,有几种合理的选择.如果常量与现有类或接口紧密相关,则应将它们添加到类或接口.例如,所有盒装数字基本类(如Integer和Double)都会导出MIN_VALUE和MAX_VALUE常量.如果常量最好被视为枚举类型的成员,则应使用枚举类型导出它们.否则,您应该使用不可实例化的实用程序类导出常量.


但是,上面的答案涉及导出常量.如果你想"强制一个Class提供这个常量",那就是另一回事,并且你的界面中有常量并不能做到这一点.只有你可以强制执行此类操作的方法是在界面中使用getter.