我的问题接近this one,但不完全相同。
我的类中有一个继承的(因为,我不能/不会改变它)参数数组,如下所示:
public double[] params;
该类以复杂的方式使用这些参数,因此我更希望为数组中的每个元素提供可读的名称。在C中,你会做这样的事情
#define MY_READABLE_PARAMETER params[0]
我也知道在Java中我可以创建一堆常量或带有属性的枚举器。然后,要访问参数,我必须键入以下内容:
params[MY_READABLE_PARAMETER]
这是可以接受的,但我真的想省略数组名称。有可能吗?
答案 0 :(得分:3)
是的,只需不使用数组即可:
double myReadableParameter;
double anotherReadableParameter;
如果您需要将它们作为集合访问,您可以随时将它们放在列表中。
答案 1 :(得分:3)
你有什么理由不能这样做吗?
...
public double getMyReadableParam() {
return params[0];
}
public void setMyReadableParam(double value) {
params[0] = value;
}
...
答案 2 :(得分:3)
使用Enum
:
enum Param {
AGE(0);
WEIGHT(1);
...
private int arrayIndex;
// Constructor
Param(int index) {
arrayIndex = index;
}
public double getValue(double[] params) {
return params[arrayIndex];
}
}
你可以这样使用
double age = Param.AGE.getValue(params);
我认为这不比其他建议好,但我想展示如何使用ENUM
。
答案 3 :(得分:1)
如果你有一个双精度数组,并且特定位置的每个数组元素都有明确的含义,你应该创建一个类。
public class MyParamBlob extends ParentParamBlob
{
private double myReadableParameter;
private double anotherParameter;
private double yetOneMore;
// getters and setters as appropriate
}
如果您需要处理来自“outside”的现有double[]
,您可以使用构造函数和/或将数组作为参数的方法。
public class MyParamBlob
{
...
public MyParamBlob(double[] values)
{
setAll(values);
}
// getters and setters as appropriate
...
public void setAll(double[] values)
{
myReadableParameter = values[0];
anotherParameter = values[1];
// etc.
}
}
编辑 - 解释我的评论
如果原始父类(这是double []存在于第一位的原因)具有数组的getter,则可以在此类中重写,在请求时构建并返回数组 - - 例如
public double[] getParams()
{
double[] params = new double[4];
params[0] = myReadableParameter;
params[1] = anotherParameter;
// etc.
}
如果数组直接可以从父类的实例访问,而没有getter,例如myArray = parentInstance.params
或double d2 = parentInstance.params[2]
然后(1)这是一个糟糕的设计,(2)来电者可以从您parentInstance.params[1] = 0.0;
下面改变数组值