java - Collections.sort、Enum、Comparable接口(interface)问题

标签 java enums comparable

我有一个 Card 类,其他卡片(Card Game)从中继承。纸牌花色和号码存储在这样的枚举中

public static enum Suit {
    CLUBS, DIAMONDS, HEARTS, SPADES
};

public static enum Rank {
    DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE
};

我的第一个问题是如何更改卡片等级的顺序。在从 Card 类继承的每个单独的类(纸牌游戏)中,不同的纸牌游戏对不同的纸牌赋予不同的重要性级别。

我的第二个问题是使用可比接口(interface)。

所以我有一张这样的类(class)卡片:

public  class Card implements Comparable<Card> {

public Suit suit;
public Rank rank;


public Card(Rank ranker, Suit suiter) {

    rank = ranker;
    suit = suiter;
}


//Other Methods for rank and suit here. 


@Override
public int compareTo(Card o) {

    int rankCom = rank.compareTo(o.rank);
    return rankCom != 0 ? rankCom : suit.compareTo(o.suit);
}

我最近刚接触到类似的接口(interface),我不确定我的实现是否正确。当我想使用 collections.sort(cards_saver) 整理我的卡片时,问题就出现了。 cards_saver 是我存储卡片的地方。所有这些都很好。 collections.shuffle(cards_saver) 也可以正常工作。我在执行 collections.sort 时遇到的问题是:

Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<Card>). The inferred type Card is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>

我会把我所有的额外代码都贴出来……只是这太长了。如果我没有很好地解释问题,请发表评论-我会尽力解释。

提前致谢

最佳答案

My first problem is how to change the order of the cards ranks. In each separate class(Card Game) that inherits from class Card as different card games place different levels of importance on different cards.

您有两种方法:

  1. 由于您是从 Card 继承的,因此您只需重写 compareTo 即可执行相应的操作。
  2. 可以看一下Comparator接口(interface),方便根据上下文重新定义对象的比较规则。

至于你得到的那个错误,它真的没有意义。问题可能出在其他地方。

关于java - Collections.sort、Enum、Comparable接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10508350/

相关文章:

c# - 将字符串值与枚举的字符串值进行比较

java - 为什么netty FastThreadLocal的基准测试结果没有比ThreadLocal快多少?

Java - 检测垃圾收集器?

java - 将文件中的值与数组进行比较

objective-c - objective-c : way to check for enabled flags

java - 如何在另一个 Java 类中使用枚举?

java - 如何告诉 Java 接口(interface)实现了 Comparable?

java - Java 中的自定义 toString 未提供所需的输出并引发错误

java - 如何将 ResultSet 对象转换为 Comparable 对象

java - Java 会注意到循环何时不会改变任何内容,或者我应该使用break 语句吗?