我有一个通用类Card
。 Rank
是界面
class Card<T extends Enum<T> & Rank>
我正在尝试创建两个卡的静态比较器。
public final static Comparator<Card<?>> comparatorByAttribute1 = new Comparator<Card<?>>() {
@Override
public int compare(Card<?> o1, Card<?> o2)
{
...
}
};
如何定义o1的类型应与o2相同?
答案 0 :(得分:2)
为什么不在类型声明中使用实际类型?
public final static Comparator<Card<ActualType>> comparatorByAttribute1 =
new Comparator<Card<ActualType>>() {
@Override
public int compare(Card<ActualType> o1, Card<ActualType> o2) {
return 0;
}
};
使用...
public enum ActualType implements Rank {...}
或者,如果要保留泛型类型<T>
,则需要使用泛型静态方法,因为在Java中无法使用泛型属性:
public final static <T extends Enum<T> & Rank> Comparator<Card<T>>
comparatorByAttribute1() {
return new Comparator<Card<T>>() {
@Override
public int compare(Card<T> o1, Card<T> o2) {
return 0;
}
};
}
或者,您采用不安全的投射:
@SuppressWarnings({ "rawtypes", "unchecked" })
public final static <T extends Enum<T> & Rank> Comparator<Card<T>>
comparatorByAttribute1() {
// Your attribute
return (Comparator) comparatorByAttribute1;
}