我目前正在处理一个巨大的数据输入,包括很多值,我想在吸气剂中接收以供以后使用。
在编写了几个方法之后,我想知道使用一个get方法是否更好一点,包含所有可能值的枚举类,例如。
public double getStat(StatType st) {
if(st != null)
return st.getValue();
}
而不是
public double getAvgReflection() {
return ...
}
public double getMaxLifesteal() {
return ...
}
是否有任何使用这两种可能性的惯例? 有什么不利?
提前致谢!
答案 0 :(得分:2)
使用Enum maxes可以更轻松地添加新的统计数据,只需在Enum中添加常量即可。 但是所有统计数据都需要以相同的方式运行,即在您的示例中是双倍的。如果你想添加一个int stat会怎么样?
答案 1 :(得分:1)
"惯例"你问的问题真的归结为你的价值观的使用和定义。当您创建值Enums时,您必须将作为该类型处理它们。意思是,你的类中的字段必须这样定义:
private MyEnum avgReflection;
private MyEnum maxLifesteal;
...
public MyEnum getAvgReflection {
return this.avgReflection;
}
等等。
现在,您可以让Enums返回double值,但这些值是静态的。我不认为你关心静态值,而是一组静态值。
然后你有两个可能的选择:将所有可能的参数声明为字段,或创建一个聚合字段来保存所有值,然后使用枚举作为索引:
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< String,double>或Map< MyEnum,double>,甚至Map< MyEnum,Object>。 Map类型将使您能够维护动态大小的集合,并且可能还包含多种类型(转换值的代价高昂)。
您应该根据需要保留的属性数量,您愿意承受的开销以及您的风格做出决定。