什么时候调用枚举构造函数?

时间:2013-02-04 16:14:40

标签: java

我正在使用枚举实现一副牌作为单身人士,这样我就可以从程序的任何地方对牌组进行普遍访问。作为枚举构造函数的一部分,它会用每张卡片对一个arraylist进行洗牌,然后将它们全部推到一个堆栈上(它看似符合标准)。

该构造函数何时被调用?它是在运行时构建的吗?编译时间?我第一次打电话给enum?我是否可以期望每次运行程序时,卡片组都会被正确随机化?

谢谢!

3 个答案:

答案 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类时,将调用构造函数。