我目前正在处理一个巨大的数据输入,包括许多值,我希望在getter中接收这些值,以供以后使用。
在编写了一些方法之后,我想知道是否最好只使用一个get方法,一个包含所有可能值的enum类。
public double getStat(StatType st) {
if(st != null)
return st.getValue();
}而不是
public double getAvgReflection() {
return ...
}
public double getMaxLifesteal() {
return ...
}有使用这两种可能性之一的约定吗?有什么优势吗?
提前感谢!
发布于 2016-04-08 16:28:54
你所问的“惯例”实际上归结为你价值观的使用和定义。生成值Enum时,必须将它们作为该类型来处理。也就是说,必须将类中的字段定义为:
private MyEnum avgReflection;
private MyEnum maxLifesteal;
...
public MyEnum getAvgReflection {
return this.avgReflection;
}以此类推。
现在,您可以让Enum返回双值,但是这些值是静态的。我不认为您关心的是静态值,而是可能是一组静态值。
然后有两个可能的选项:将所有可能的参数声明为字段,或者创建一个包含所有值的聚合字段,然后使用Enum作为索引:
public enum MyEnum {
averageReflection(0),
maximumLifeSteal(1);
private int value;
private MyEnum(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
...
private double[] attributes = new double[100]; // arbitrary initialization
public double getAttribute(MyEnum attribute) {
return this.attributes[attribute.getValue()];
}使用数组的两个限制(假设您想要原始值并关心性能)是所有的值都必须是相同的类型,并且属性的数量将在编译时设置。
此外,您可能只想使用Map或Map,甚至Map。Map类型将使您能够维护一个动态大小的集,并且可能还包含多个类型(转换值的开销很大)。
您应该根据您需要保留的属性的数量、您愿意容忍的开销类型以及您的风格来做出决定。
发布于 2016-04-08 15:02:42
使用Enum最大值可以更容易地添加新的统计数据,只需在Enum中添加一个常量即可。但是所有的统计数据都需要同样的行为方式,即在你的例子中是双倍的。如果您想要添加一个int,会发生什么?
https://stackoverflow.com/questions/36502625
复制相似问题