1

我正在将一副纸牌实现为单例,使用枚举,以便我可以从程序中的任何地方通用访问该纸牌。作为枚举构造函数的一部分,它用每张卡片洗牌一个数组列表并将它们全部推入堆栈(这似乎象征性地合适)。

什么时候调用构造函数?它是在运行时构建的吗?编译时间?我第一次打电话给枚举?我可以期望每次我运行程序时,这副纸牌都会正确随机化吗?

谢谢!

4

3 回答 3

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() { .. }
}
于 2013-02-04T16:19:06.733 回答
3

您不应该为此使用单例。

但是要回答这个问题,构造函数是在类加载器加载枚举类(Deck)并初始化时调用的。因此,在任何代码行可以调用 Deck 类的任何方法之前,deck 将被洗牌。

于 2013-02-04T16:20:14.663 回答
0

对于每个枚举类型,构造函数在第一次按顺序初始化 Enum 类时被调用。

于 2013-02-04T16:20:47.840 回答