通用类作为参数

时间:2014-05-02 11:59:15

标签: java generics comparator anonymous-class

我有一个通用类CardRank是界面

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相同?

1 个答案:

答案 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;
}