簡體   English   中英

每個統計信息的Enum-getter與Getter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM