Java枚举最佳实践

时间:2010-08-27 08:22:59

标签: java enums

这可能看起来像是一个微不足道的问题,但我对于关于枚举的想法有点混乱......

所以我有一个类 - 让我们说它叫做DVDPlayer - 我希望有一个枚举来表示它是ON,OFF还是STANDBY。

所以我可以把枚举放在课堂上 - 它在课堂之外没有意义。我的问题是 - 如果枚举是公开的,那么其他类可以查询值,或者我应该将其设为私有,然后使用“isOn”,“isOFf”和“isStandby”方法?

后者听起来有些愚蠢,但我不确定将枚举公之于众也是一个好主意。

6 个答案:

答案 0 :(得分:8)

我想说将它公开似乎是一个好主意。主要原因是应用程序更容易扩展,因为每次添加状态时都不必考虑添加新方法。

如果您决定将其公开,则应考虑将其作为顶级枚举。我真的不明白为什么你说“它在课堂之外没有意义”。我认为DVDPlayerState听起来像是一个完美的公共/顶级枚举。

答案 1 :(得分:2)

这取决于您希望如何使用外部世界的DVDPlayer类:

if (dvdPlayer.getState() == State.ON)

if (dvdPlayer.isOn())

我认为第一个是更好的选择。您不必使用委派方法污染您的代码。

答案 2 :(得分:2)

根据经验,你想让事情尽可能保密(尽管通常情况下,这不是枚举的用例),但从问题提出的方式来看,我不确定你是否使用枚举作为意图。

您想使用枚举来表示固定值;将这些值保存为静态最终整数或字符串是更清洁的替代方法。所以对于声明为

的枚举
public enum DvdState { ON, OFF, STANDBY };

你的课看起来有点像这样:

public class DvdPlayer {
    private DvdState state = DvdState.OFF;

    public void setState(DvdState state) {
        this.state = state;
    }
}

调用类将使用以下代码:

dvdPlayer.setState(DvdState.ON);

答案 3 :(得分:0)

让枚举公开可能有意义。然后你会有这样的事情:

DvdPlayer.State getState();

如果只有三种状态,最好使用isOn,isOff和isStandby方法。对于更多的州,公共枚举更好。枚举也可以在switch语句中使用,这很方便。

答案 4 :(得分:0)

如果enum是公共界面的一部分,则将其声明为公开是有意义的。这似乎是 DVPlayer 的情况,因为你说它可以被查询。 “ isOn ”,“ isoff ”和“ isStandby ”这三种方法不必要地破坏了公共界面。

但有时候enum在课堂上使用会派上用场,在这种情况下,它应该被声明为私人。例如,以下声明

private enum Format{DVD, BLURAY};
如果 Format DVDPlayer 类内部使用,但不是公共接口的一部分,或者作为方法的参数或返回值,

也没关系。< / p>

答案 5 :(得分:0)

我想我会成为第一个提倡在这里使用方法的人。首先,考虑一下你班级的用户。他们对您的业务领域了解得越少越好,所以不要将他们与“状态”之类的东西混淆。你不会在现实生活中“设置DVD播放器的状态”,而只是“打开它”或“关闭时关闭”,这对我来说是尖叫的方法。除了Java因为严格静态类型而闻名和喜爱之外,它允许您仅通过IDE的自动完成建议来发现界面。阅读方法turnOff对我来说很有意义,而setState是模棱两可的,并且要求我先查看状态枚举,以便让我知道状态实际上是什么。