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

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

class Card 
{
     Rank rank; 
     Suit 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不是枚举.任何的想法?

解决方法:

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

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;
    }
}
上一篇:java – 在父类之间来回转换后,子对象是否会丢失其唯一属性


下一篇:为什么Java的多态性在对象和向量之间进行选择时无法捕获正确的方法?