java - 恒定参数设计

标签 java design-patterns

我正在使用一个包含所有类都可以引用的常量或参数值的类;


public class Parameters {
   public static final String JUMP_TO_VALUE = "Parameters.JUMP_TO_VALUE";
   public static final String EXCEPTION_ID  = "Parameters.EXCEPTION_ID";
}

我的应用程序中的一些基础类将使用Parameters类中的参数值,如下所示:


   mapOfValues.put( Parameters.JUMP_TO_VALUE, "some_value")

这很简单,我在参数中有一些基本值,我的大多数基类都会使用它们。在很多情况下,我需要向 Parameters 类添加附加参数,但我不想在每次创建新参数时过度填充或污染 Parameters 类参数被识别。我宁愿创建一些 Parameters 的子类,例如:


  public class NetworkParameters extends Parameters {
      public static final String HOST_NAME = "NetworkParameters.HOST_NAME";
      public static final String POST_NUM  = "NetworkParameters.PORT_NUM";
 }

我的一些特定类将使用此类中包含的值,而不是将它们放入 Parameters 类中。

这些需要 HOST_NAME 的特定类,例如,我不希望它们引用 NetworkParameters 类,而是引用 Parameters 类。

我确信人们以前已经这样做过,但我正在寻求有关如何最好地实现此设计的建议。

最佳答案

按照您所描述的方式,这根本不可能。

当您引用静态对象时,您引用的是声明这些对象的类。很简单,如果您在 NetworkParameters 类中声明一个常量,则它不存在于 参数类,因此无法访问。

将大量参数分离到不同的包含类中(它们不需要是彼此的子类型,因为这不会实现任何目标)是非常好的做法并且经常使用。为什么您如此厌恶仅使用 NetworkParameters.POST_NUM,因为这是参数的名称,对我来说听起来完全合理?

可能对您有帮助的一件事(取决于您自己的口味)是使用 Java 5 的 static import特征。如果在类文件的顶部声明

import static the.package.name.Parameters.*;
import static other.package.NetworkParameters.*;

然后您将能够使用两个类中的所有常量名称,而无需任何前缀。当很明显什么来自哪里时,这通常是相当不错的 - 但如果您从几个类静态导入,它可能会变成一场噩梦,尤其如果您没有 IDE 来计算供您引用。

但同样 - 为什么您想要将它们引用为 Parameters.FOO,但希望它们存在于单独的类中?如果您完全做到这一点,任何一种方法(所有内容都在一个文件中,不同的常量在不同的文件中)都是好的,但您无法神奇地改变 Java 引用的规则,因为您不喜欢它们的外观。 :-)

关于java - 恒定参数设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2007866/

相关文章:

java - 拦截器 preHandle() 未重定向到 login.html

java - 无法从静态上下文引用非静态变量 "youngestAge"。任何帮助表示赞赏! :)

.net - 在服务层存储状态

java - 异常处理 ScheduledExecutorService

java - 仅从文本文件中读取整数并将其相加

c# - 移除开关盒的设计模式

java - 当必须以明确的顺序执行某些步骤时,状态机是否是合适的设计?

c# - 哪种设计模式允许获得此架构

.net - 存储库基础或特定方法?

java - JodaTime 类型转换