我尝试设计一个关于扑克牌的项目。我有一张卡片
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不是枚举。任何的想法?
答案 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;
}
}