Pet*_*nis 3 java polymorphism enums interface
我尝试设计一个关于扑克牌的项目.我有一张卡片
class Card
{
Rank rank;
Suit suit;
}
Run Code Online (Sandbox Code Playgroud)
西装是一个枚举.
enum Suit { .... }
Run Code Online (Sandbox Code Playgroud)
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() { ... }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不能在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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4065 次 |
| 最近记录: |