gpt4 book ai didi

java - 不同的 Enum 方法参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:59 24 4
gpt4 key购买 nike

我遇到过一个案例,我需要做出设计决策(与其说是为了程序本身,不如说是为了了解其他人在这种情况下所做的事情,最好把它看成是要是一个 API)。我有一个枚举类:

public enum Type
{

CAPTAIN(2), // Only Use CalcMorale never other
LEADER(5), // Only use CalcMorale never other
PARTIER(80); // Only use CalcMorale2 never other

int calcMorale(int inMorale)
{
return inMorale * (100 + morale) / 100;
}

int calcMorale2(int inMorale, int teamCount)
{
return inMorale + morale * teamCount;
}

int morale;

private Type(int aMor)
{
morale = aMor;
}

}

有一个类 Character 保存这些枚举之一,也是传入参数的一个。

所评论的问题是,我只希望某些枚举在枚举类中使用某些方法。领导者为团队士气增加 5%,但党员为该党内的每个成员增加 80,因此需要另一个参数。我可以通过几种方式解决问题,但我想知道社区对他们如何解决问题的普遍共识。

我可以:

让程序员负责调用正确的方法。 (这对我来说听起来不对)。

给每个枚举它自己的函数版本。 (这会产生一个巨大的文件,我会重复很多代码)。

将责任留给“Character”类,它有一个带有开关处理这个的方法。 (这意味着程序员可以更改计算而不是故意的)。但是,如果我想稍后将枚举移动到文件中,这会导致更少的问题。但是,如果这应该完全是枚举的责任,我怀疑这是否会破坏封装。

使Type成为一个类并通过匿名内部类定义方法。在这种情况下,类将添加到映射中,而不是在枚举类中使用 getByName()。

--

您认为最合适的是什么? (我希望我的类(class)尽可能地独立,就像我在使用 API 一样(不会),以及您的建议如何/会根据枚举的数量受到影响?我想要的情况如何能够使用这两种方法的枚举?语言是 Java。

最佳答案

正如您所说,您必须考虑您的应用程序将如何处理这个问题。如果您希望枚举类自己处理这个问题,您将需要某种条件和某种形式的重载(这意味着开发人员无论如何都要负责调用正确的方法。

但是您可以强制开发人员始终发送 teamcount 而不管:

public enum Type {
CAPTAIN(2),
LEADER(5),
PARTIER(80);

private final int morale;

private Type(int m){
morale = m;
}

public int getMorale(int inMorale) {
return getMorale (inMorale, 0);
}

public int getMorale(int inMorale, int teamCount) {
switch (this) {
case CAPTAIN:
case LEADER:
return inMorale * (100 + morale) / 100;
case PARTIER:
return inMorale + morale * teamCount;
}
return 0;
}
}

编辑:将开关更改为“this”

关于java - 不同的 Enum 方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com