Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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_Design Patterns - Fatal编程技术网

Java 恒参数设计

Java 恒参数设计,java,design-patterns,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"; } 我的应用程序中的一些基础类将使用参数类中的参数值,如:: mapOfVal

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


public class Parameters {
   public static final String JUMP_TO_VALUE = "Parameters.JUMP_TO_VALUE";
   public static final String EXCEPTION_ID  = "Parameters.EXCEPTION_ID";
}
我的应用程序中的一些基础类将使用参数类中的参数值,如::


   mapOfValues.put( Parameters.JUMP_TO_VALUE, "some_value")
这很简单,我在参数中有一些基本值,我的大多数基类都会使用它们。在很多情况下,我需要向parameters类添加额外的参数,但我不想在识别新参数时过度填充或污染parameters类。我宁愿创建一些参数的子类,如:

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

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


我相信人们以前已经这样做过,但我正在寻找如何最好地实施此设计的建议。

这完全不可能,按照您描述的方式

当您引用静态对象时,您将引用在其中声明这些对象的类。很简单,如果在
NetworkParameters
类中声明一个常量,那么它在
Parameters
类中不存在,因此不可访问

将大量参数分离到不同的包含类中(不需要是彼此的子类型,因为这样做什么也做不到)是一种非常好的做法,并且经常使用。为什么您对只使用
NetworkParameters.POST_NUM
如此反感,因为这是参数的名称,听起来对我来说完全合理

可以帮助您的一件事(取决于您自己的喜好)是使用Java5的特性。如果在类文件的顶部声明

import static the.package.name.Parameters.*;
import static other.package.NetworkParameters.*;
然后,您将能够使用这两个类中的所有常量名称,而无需任何前缀。当很明显什么来自何处时,这通常是非常好的,但是如果您从几个类静态导入,特别是如果您没有IDE来为您计算引用,这可能会成为一场噩梦


但是再一次-为什么要将它们引用为
参数.FOO
,但要将它们放在单独的类中?任何一种方法(一个文件中的所有内容,不同文件中的不同常量)都是很好的,如果您完全这样做的话,但是您不能神奇地改变Java引用的规则,因为您不喜欢它们的外观。:-)

这根本不可能,就像你描述的那样

当您引用静态对象时,您将引用在其中声明这些对象的类。很简单,如果在
NetworkParameters
类中声明一个常量,那么它在
Parameters
类中不存在,因此不可访问

将大量参数分离到不同的包含类中(不需要是彼此的子类型,因为这样做什么也做不到)是一种非常好的做法,并且经常使用。为什么您对只使用
NetworkParameters.POST_NUM
如此反感,因为这是参数的名称,听起来对我来说完全合理

可以帮助您的一件事(取决于您自己的喜好)是使用Java5的特性。如果在类文件的顶部声明

import static the.package.name.Parameters.*;
import static other.package.NetworkParameters.*;
然后,您将能够使用这两个类中的所有常量名称,而无需任何前缀。当很明显什么来自何处时,这通常是非常好的,但是如果您从几个类静态导入,特别是如果您没有IDE来为您计算引用,这可能会成为一场噩梦


但是再一次-为什么要将它们引用为
参数.FOO
,但要将它们放在单独的类中?任何一种方法(一个文件中的所有内容,不同文件中的不同常量)都是很好的,如果您完全这样做的话,但是您不能神奇地改变Java引用的规则,因为您不喜欢它们的外观。:-)

我不认为在一个文件中放入大量常量会过分。只要通过良好的格式和文档使其组织良好即可。我认为这里不需要子类化。子类表示对象之间的某种关系。首先,您没有真正创建对象,因此创建子类并不真正适合这里的模型。此外,在这里使用子类可能会使事情复杂化。例如,如果要在另一个类中使用多种类型的常量,则必须导入多个java文件

我不认为在一个文件中放入大量常量会过分。只要通过良好的格式和文档使其组织良好即可。我认为这里不需要子类化。子类表示对象之间的某种关系。首先,您没有真正创建对象,因此创建子类并不真正适合这里的模型。此外,在这里使用子类可能会使事情复杂化。例如,如果要在另一个类中使用多种类型的常量,则必须导入多个java文件

您确定要在代码中嵌入这些值吗


在我看来,它们就像是要放在配置文件中的那种数据,因此它们可以很容易地更改,而无需重新编译代码。对配置文件中的名称-值对进行简单的散列,将其包装为可以按您需要的方式访问,可能是解决相同问题的更灵活的方法

您确定要在代码中嵌入这些值吗

在我看来,它们就像是要放在配置文件中的那种数据,因此它们可以很容易地更改,而无需重新编译代码。配置文件中名-值对的简单散列(包装为可以按您需要的方式访问)可能是一种更灵活的方法