如何在Java中强制使用常量
我正在使用JAX-RS创建RESTWeb服务 我需要公开访问我的如何在Java中强制使用常量,java,interface,constants,Java,Interface,Constants,我正在使用JAX-RS创建RESTWeb服务 我需要公开访问我的资源类上的@Path注释的值。使用反射来获得这个值似乎有点沉重 我想我应该将该值保存在一个公共静态最终字符串中,以便@Path注释和其他类都可以访问该值 强制类提供此常量的最佳方式是什么?我的印象是,在接口中使用常量是一种反模式(有效的Java第二版) 编辑: 正如Java所指出的,“如果常量与现有的类或接口紧密关联,那么应该将它们添加到类或接口中” 在我的情况下,@Path对于接口的所有实现者都是相同的,接口将提供方法,因此我认为
资源
类上的@Path
注释的值。使用反射来获得这个值似乎有点沉重
我想我应该将该值保存在一个公共静态最终字符串中,以便@Path
注释和其他类都可以访问该值
强制类提供此常量的最佳方式是什么?我的印象是,在接口中使用常量是一种反模式(有效的Java第二版)
编辑:
正如Java所指出的,“如果常量与现有的类或接口紧密关联,那么应该将它们添加到类或接口中”
在我的情况下,@Path
对于接口的所有实现者都是相同的,接口将提供方法,因此我认为我可以安全地将常量添加到接口中。既然您已经有了,我将为您引用它(第98-99页):
如果您想出口contants,有几个合理的选择。
如果常量与现有类或接口紧密关联,
您应该将它们添加到类或接口中。例如,所有
已装箱的数值基元类(如Integer和Double)导出
最小值和最大值常量。如果最好将常数视为
枚举类型的成员,则应使用枚举导出它们
类型。否则,应使用
不可实例化的实用程序类
但是,上面的答案涉及导出常量。如果你想“强制一个类提供这个常量”,那是另一回事,在你的接口中有常量并不能做到这一点。您可以强制执行此类操作的唯一方法是在界面中为其设置一个getter。如果这是一个选项,您可以简单地将功能添加为一个简单的方法<代码>静态
在继承方面存在某些问题,并不总是一个好主意
interface HasPath {
String getPath();
}
class Foo implements HasPath {
private static final String PATH = "/my/path";
@Override
public void String getPath() {
return PATH;
}
@Annotated(PATH) void foo() { }
}
向私有字段添加getter方法?有效的java并没有说在接口中使用常量是一种反模式。它说只为常量使用接口是一种反模式,“常量接口”是一种反模式。+1特别是对于其他情况,您应该使用不可实例化的实用程序类导出常量。我认为如果我的接口中有一个getter,我无法在@Path注释中访问它?@retrodev对此没有经验,但我猜您应该能够访问它。