首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个属性的Enum-getter vs. Getter

每个属性的Enum-getter vs. Getter
EN

Stack Overflow用户
提问于 2016-04-08 14:46:54
回答 2查看 497关注 0票数 0

我目前正在处理一个巨大的数据输入,包括许多值,我希望在getter中接收这些值,以供以后使用。

在编写了一些方法之后,我想知道是否最好只使用一个get方法,一个包含所有可能值的enum类。

代码语言:javascript
复制
public double getStat(StatType st) {
    if(st != null)
        return st.getValue();
}

而不是

代码语言:javascript
复制
public double getAvgReflection() {
    return ...
}

public double getMaxLifesteal() {
    return ...
}

有使用这两种可能性之一的约定吗?有什么优势吗?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-08 16:28:54

你所问的“惯例”实际上归结为你价值观的使用和定义。生成值Enum时,必须将它们作为该类型来处理。也就是说,必须将类中的字段定义为:

代码语言:javascript
复制
private MyEnum avgReflection;
private MyEnum maxLifesteal;
...
public MyEnum getAvgReflection {
    return this.avgReflection;
}

以此类推。

现在,您可以让Enum返回双值,但是这些值是静态的。我不认为您关心的是静态值,而是可能是一组静态值。

然后有两个可能的选项:将所有可能的参数声明为字段,或者创建一个包含所有值的聚合字段,然后使用Enum作为索引:

代码语言:javascript
复制
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类型将使您能够维护一个动态大小的集,并且可能还包含多个类型(转换值的开销很大)。

您应该根据您需要保留的属性的数量、您愿意容忍的开销类型以及您的风格来做出决定。

票数 1
EN

Stack Overflow用户

发布于 2016-04-08 15:02:42

使用Enum最大值可以更容易地添加新的统计数据,只需在Enum中添加一个常量即可。但是所有的统计数据都需要同样的行为方式,即在你的例子中是双倍的。如果您想要添加一个int,会发生什么?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36502625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档