繁体   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