我正在使用枚举实现一副牌作为单身人士,这样我就可以从程序的任何地方对牌组进行普遍访问。作为枚举构造函数的一部分,它会用每张卡片对一个arraylist进行洗牌,然后将它们全部推到一个堆栈上(它看似符合标准)。
该构造函数何时被调用?它是在运行时构建的吗?编译时间?我第一次打电话给enum?我是否可以期望每次运行程序时,卡片组都会被正确随机化?
谢谢!
答案 0 :(得分:3)
我认为你是以错误的方式设计它。 enum
表示一组有限值,不应该具有全局功能。它们只是常量,它们可以为每个常量提供功能,但更多的东西不值得这样做。
直接在枚举构造函数中为一个牌组带来一个随机播放功能(在任何情况下为每个常量调用)似乎不是正确的方法。
更好的解决方案是拥有4个不同的类,例如:
enum Suit {
HEARTS,
CLUBS,
..
}
enum Value {
ACE,
TWO,
..
}
class Card {
Suit suit;
Value value;
}
class Deck {
List<Card> cards;
public void shuffle() { .. }
}
答案 1 :(得分:3)
你不应该使用单身人士。
但是要回答这个问题,当类加载器加载枚举类(Deck)并初始化时,将调用构造函数。因此,在任何代码行可以调用Deck类的任何方法之前,套牌将被洗牌。
答案 2 :(得分:0)
对于每个枚举类型,首次按顺序初始化Enum类时,将调用构造函数。