简体   繁体   English

通用类的比较器

[英]Comparator of a generic class

I have a generic class : 我有一个通用类:

class Card<T extends Enum<T> & Rank> implements Comparable<Card<T>>

Rank is java interface. Rank是java接口。 I'm trying to make a Comparator instance in the Card class. 我正在尝试在Card类中创建一个Comparator实例。

public final static Comparator<Card> comparator = new Comparator<Card>() { ... }

The previous line has a warning. 前一行有一个警告。

Card is a raw type. 卡是原始类型。 References to generic type Card should be parameterized 泛型卡的引用应参数化

How can I declare the generic type of the Card class ? 如何声明Card类的通用类型?

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

  private final T rank;
  private final Suit suit;

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

  public final static <T extends Enum<T> & Rank> Comparator<Card<T>> byRank() 
  {
    return new Comparator<Card<T>>() {

      @Override
      public int compare(Card<T> o1, Card<T> o2) 
      {
        int r = compareRank(o1, o2);
        return  r != 0 ? r : compareSuit(o1,o2); 
      }
    };
  }

  public final static <T extends Enum<T> & Rank> Comparator<Card<T>> bySuit() 
  {
    return new Comparator<Card<T>>() {

      @Override
      public int compare(Card<T> o1, Card<T> o2) 
      {
        int r = compareSuit(o1,o2); 
        return r != 0 ? r : compareRank(o1, o2);
      }
    };
  }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM