Java中的枚举和多态,扑克牌示例

时间:2014-04-30 10:57:54

标签: java interface enums polymorphism

我尝试设计一个关于扑克牌的项目。我有一张卡片

class Card 
{
     Rank rank; 
     Suit suit;
}

The Suit是一个枚举。

  enum Suit { .... }

Rank应该有一个方法getValue()。 我希望有一个以上的排名,即。 BlackJackRank和PokerRank。所以我创建了一个接口Rank,方法是getValue,两个枚举BlackJackRank和PokerRank实现了这个接口。

enum BlackJackRank implements Rank
{
   ACE(1),DEUCE(2),THREE(3) ....
   private final int value;
   private BackJackRank(int value) { ... }

   @Override
   public int getValue() { ... }
}

我的问题是我无法在Card类中调用rank.name()和rank.ordinal(),因为Rank不是枚举。任何的想法?

1 个答案:

答案 0 :(得分:5)

现在,在您更改了问题后,以下是应该有效的答案:

class Card<T extends Enum<T> & Rank> {

    private final T rank;

    public Card(T rank) {
        this.rank = rank;
    }

    public int getRankOrdinal() {
        return rank.ordinal();
    }

    public int getRankValue() {
        return rank.getValue();
    }
}

interface Rank {
    public int getValue();
}

enum BlackJackRank implements Rank {

    ACE(1);

    private final int value;

    private BlackJackRank(int value) {
        this.value = value;
    }
    @Override public int getValue() {
        return value;
    }
}