这可能看起来像是一个微不足道的问题,但我对于关于枚举的想法有点混乱......
所以我有一个类 - 让我们说它叫做DVDPlayer - 我希望有一个枚举来表示它是ON,OFF还是STANDBY。
所以我可以把枚举放在课堂上 - 它在课堂之外没有意义。我的问题是 - 如果枚举是公开的,那么其他类可以查询值,或者我应该将其设为私有,然后使用“isOn”,“isOFf”和“isStandby”方法?
后者听起来有些愚蠢,但我不确定将枚举公之于众也是一个好主意。
答案 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
是模棱两可的,并且要求我先查看状态枚举,以便让我知道状态实际上是什么。