[英]Enum-getter vs. Getter for each stat
我目前正在處理海量數據輸入,其中包括很多值,我希望在getter中接收這些值以供以后使用。
在寫了一些方法之后,我想知道是否最好只使用一個get方法,它帶有一個包含所有可能值的枚舉類,例如
public double getStat(StatType st) {
if(st != null)
return st.getValue();
}
代替
public double getAvgReflection() {
return ...
}
public double getMaxLifesteal() {
return ...
}
是否有使用兩種可能性中的任何一種的約定? 有什么缺點嗎?
提前致謝!
使用枚舉可最大化添加新統計信息的難度,只需在枚舉中添加常量即可。 但是所有統計信息都必須以相同的方式運行,即在您的示例中為雙精度。 如果您想添加一個int stat,會發生什么?
您所要求的“慣例”實際上歸結為價值觀的使用和定義。 當您將值設為 Enums時,必須將其作為該類型進行處理。 意思是,您的類中的字段必須這樣定義:
private MyEnum avgReflection;
private MyEnum maxLifesteal;
...
public MyEnum getAvgReflection {
return this.avgReflection;
}
依此類推。
現在,您可以讓Enums返回double值,但是這些值是靜態的。 我不認為您擔心靜態值,而是靜態值集。
然后,您有兩個可能的選擇:將所有可能的參數聲明為字段,或者創建一個聚合字段來保存所有值,然后使用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 <String,double>或Map <MyEnum,double>,甚至Map <MyEnum,Object>。 映射類型將使您能夠維護動態大小的集合,並可能還包含多個類型(轉換值的開銷很大)。
您應該根據需要保留的屬性數量,您願意忍受的開銷類型以及樣式來做出決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.