【发布时间】:2014-05-17 16:42:27
【问题描述】:
我有一个通用类:
class Card<T extends Enum<T> & Rank> implements Comparable<Card<T>>
Rank是java接口。
我正在尝试在 Card 类中创建一个 Comparator 实例。
public final static Comparator<Card> comparator = new Comparator<Card>() { ... }
上一行有一个警告。
卡片是一种原始类型。对泛型类型 Card 的引用应该是 参数化
如何声明Card 类的泛型类型?
【问题讨论】:
-
我……从这些代码片段中看不到它。您收到此错误的哪一行代码? (我敢打赌你声明了一个
Card的实例而不给它一个类型。) -
您的比较器实现是否要求
T是任何特定类型(或扩展特定类型)?如果没有,您应该只使用Comparator<Card<?>>。另一方面,如果您已经将Card设为Comparable,为什么还需要比较器? -
@MattiasBuelens 谢谢,您的回答解决了我的问题。对于同一个类,我需要多个不同的比较器。
-
在那种情况下,我不会让
Card实现Comparable。如果您忘记在某处使用Comparator,它可能会改用Comparable.compareTo,并导致一些很难找到的错误。如果不实现Comparable,忘记Comparator将导致编译器错误。 ;-) -
@MattiasBuelens 感谢您的建议。我将删除 Comparable 接口的实现。
标签: java generics comparator