我正在使用一个包含所有类都可以引用的常量或参数值的类;
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/