Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中强制使用常量_Java_Interface_Constants - Fatal编程技术网

如何在Java中强制使用常量

如何在Java中强制使用常量,java,interface,constants,Java,Interface,Constants,我正在使用JAX-RS创建RESTWeb服务 我需要公开访问我的资源类上的@Path注释的值。使用反射来获得这个值似乎有点沉重 我想我应该将该值保存在一个公共静态最终字符串中,以便@Path注释和其他类都可以访问该值 强制类提供此常量的最佳方式是什么?我的印象是,在接口中使用常量是一种反模式(有效的Java第二版) 编辑: 正如Java所指出的,“如果常量与现有的类或接口紧密关联,那么应该将它们添加到类或接口中” 在我的情况下,@Path对于接口的所有实现者都是相同的,接口将提供方法,因此我认为

我正在使用JAX-RS创建RESTWeb服务

我需要公开访问我的
资源
类上的
@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对此没有经验,但我猜您应该能够访问它。