这个问题可能看起来微不足道,但我对枚举有些困惑。
所以我有一个类 - 假设它叫做DVDPlayer - 我想要有一个枚举表示它是开着的、关着的还是待机。
所以我可以把枚举放在类里面 - 在类外部没有意义。我的问题是 - 枚举应该是公共的,这样其他类就可以查询值,还是应该将其设置为私有的,然后再加上 "isOn"、"isOff" 和 "isStandby" 方法呢?
后者听起来有些傻,但我不确定将枚举设置为公共的是否是一个好主意。
DVDPlayerState
听起来像一个完全合适的公共/顶级枚举。这取决于你想如何从外部使用DVDPlayer
类:
if (dvdPlayer.getState() == State.ON)
或者
if (dvdPlayer.isOn())
我认为第一个选项更好。您不必使用委托方法来污染您的代码。
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);
DvdPlayer.State getState();
如果你只有三种状态,最好使用isOn、isOff和isStandby方法。对于更多的状态,public enum更好。此外,枚举可以在switch语句中使用,这很方便。
enum
是公共接口的一部分,将其声明为public是有意义的。这似乎是DVPlayer的情况,因为您说它可以被查询。三个方法“isOn”,“isOFf”和“isStandby”不必要地膨胀了公共接口。enum
在类内部使用时非常方便,此时应将其声明为private。例如,以下声明private enum Format{DVD, BLURAY};
如果Format在DVDPlayer类内部使用,但不作为方法的参数或返回值的公共接口的一部分,那就可以了。
我想我会成为第一个倡导在此处使用方法的人。首先,考虑你的类的用户。他们需要了解你的业务领域越少,就越好,所以不要用"状态"之类的东西来混淆他们。在现实生活中,你不会"设置DVD播放器的状态",而只是"打开"或"关闭"它,这让我想到了方法。除此之外,Java以其严格的静态类型而闻名和受人喜爱,这使得你可以仅通过IDE的自动完成建议来发现接口。阅读一个方法turnOff
对我来说立即就有意义,而setState
则是模棱两可的,需要我首先查找状态枚举,才能知道状态实际上可以是什么。