Enum-getter 与每个统计数据的 Getter
Enum-getter vs. Getter for each stat
我目前正在处理大量数据输入,包括很多值,我想在 getter 中接收这些值以备后用。
写了几个方法后,我想知道只使用一个 get 方法是否更好,枚举 class 包含所有可能的值,例如
public double getStat(StatType st) {
if(st != null)
return st.getValue();
}
而不是
public double getAvgReflection() {
return ...
}
public double getMaxLifesteal() {
return ...
}
使用这两种可能性中的任何一种是否有任何约定?
任何 dis/advantages?
提前致谢!
使用枚举可以更轻松地添加新的统计数据,只需在枚举中添加一个常量即可。
但是所有统计数据都需要以相同的方式表现,即在您的示例中是双倍的。如果你想添加一个 int stat 会发生什么?
您所询问的 "convention" 实际上归结为您的价值观的使用和定义。当您将值设为枚举时,您必须将它们作为该类型处理。意思是,您 class 中的字段必须这样定义:
private MyEnum avgReflection;
private MyEnum maxLifesteal;
...
public MyEnum getAvgReflection {
return this.avgReflection;
}
等等。
现在,您可以让枚举 return 双精度值,但这些值是静态的。我认为您不关心静态值,而是可能关心一组静态值。
然后您有两个可能的选择:将所有可能的参数声明为字段,或者创建一个聚合字段来保存所有值,然后使用枚举作为索引:
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 类型将使您能够维护一个动态大小的集合并可能持有多种类型(转换值的开销很大)。
您应该根据需要保留的属性数量、您愿意承受的开销类型以及您的风格来做出决定。
我目前正在处理大量数据输入,包括很多值,我想在 getter 中接收这些值以备后用。
写了几个方法后,我想知道只使用一个 get 方法是否更好,枚举 class 包含所有可能的值,例如
public double getStat(StatType st) {
if(st != null)
return st.getValue();
}
而不是
public double getAvgReflection() {
return ...
}
public double getMaxLifesteal() {
return ...
}
使用这两种可能性中的任何一种是否有任何约定? 任何 dis/advantages?
提前致谢!
使用枚举可以更轻松地添加新的统计数据,只需在枚举中添加一个常量即可。 但是所有统计数据都需要以相同的方式表现,即在您的示例中是双倍的。如果你想添加一个 int stat 会发生什么?
您所询问的 "convention" 实际上归结为您的价值观的使用和定义。当您将值设为枚举时,您必须将它们作为该类型处理。意思是,您 class 中的字段必须这样定义:
private MyEnum avgReflection;
private MyEnum maxLifesteal;
...
public MyEnum getAvgReflection {
return this.avgReflection;
}
等等。
现在,您可以让枚举 return 双精度值,但这些值是静态的。我认为您不关心静态值,而是可能关心一组静态值。
然后您有两个可能的选择:将所有可能的参数声明为字段,或者创建一个聚合字段来保存所有值,然后使用枚举作为索引:
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
您应该根据需要保留的属性数量、您愿意承受的开销类型以及您的风格来做出决定。