【问题标题】:Enum types may not be instantiated error枚举类型可能未实例化错误
【发布时间】:2015-05-17 13:38:08
【问题描述】:

我目前正在制作基本卡片组,但在使用枚举时遇到了问题。

如何在我的代码中修复以下错误(枚举类型可能未实例化)并获取分配给每个枚举的值

 public enum Rank {

    ACE(14),
    KING(13),
    QUEEN(12),
    JACK(11),
    TEN(10),
    NINE(9),
    EIGHT(8),
    SEVEN(7),
    SIX(6),
    FIVE(5),
    FOUR(4),
    THREE(3),
    TWO(2);
    private final int rankValue;

    Rank(int rankValue) {
        this.rankValue = rankValue;
    }

    public int getRankValue() {
        return rankValue;
    }

}
private Card[] cards = new Card[52];

public Deck() {
    int posInDeck = 0;
    for (Suit s : Suit.values()) {
        for (Rank r : Rank.values()) {
            cards[posInDeck] = new Card(s.toString(),new Rank(r.getRankValue(), r.toString()), false);// ERROR HERE
            posInDeck++;
        }
    }
}

【问题讨论】:

  • “我该如何解决以下错误”什么错误?提供错误信息和简短而完整的代码让我们重现它。现在看起来这个代码片段是Deck 类的一部分,但我只能假设它只在缩进级别和构造函数名称上。
  • 为什么不只定义Rank枚举中的值并将Rank.ACE传递给Card的构造函数(并相应地编辑Card中的字段/getter/setter?实例化一个枚举没有意义,因为枚举是一组静态值。

标签: java arrays enums playing-cards


【解决方案1】:

您不能像实例化class 那样实例化enum。声明new Rank(r.getRankValue(), r.toString()) 不正确。

你可以这样做:

cards[posInDeck] = new Card(s.toString(),r,false);

【讨论】:

    【解决方案2】:

    您可以只使用r 而不是new Rank(r.getRankValue(), r.toString())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-19
      • 2012-10-09
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多