Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型类作为参数_Java_Generics_Comparator_Anonymous Class - Fatal编程技术网

Java 泛型类作为参数

Java 泛型类作为参数,java,generics,comparator,anonymous-class,Java,Generics,Comparator,Anonymous Class,我有一张通用类卡等级是接口 class Card<T extends Enum<T> & Rank> 类卡 我正在尝试创建两个卡的静态比较器 public final static Comparator<Card<?>> comparatorByAttribute1 = new Comparator<Card<?>>() { @Override public int compare(Card

我有一张通用类
<代码>等级是接口

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)
{ 
... 
} 
}; 

如何定义o1的类型应该与o2相同?

为什么不在类型声明中使用实际类型

public final static Comparator<Card<ActualType>> comparatorByAttribute1 = 
    new Comparator<Card<ActualType>>() {

        @Override
        public int compare(Card<ActualType> o1, Card<ActualType> o2) {
            return 0;
        }
    };
或者,如果您希望保留泛型类型
,则需要使用泛型静态方法,因为在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;
        }
    };
}
公共最终静态比较器
comparatorByAttribute1(){
返回新的比较器(){
@凌驾
公共整数比较(卡o1、卡o2){
返回0;
}
};
}
或者,您使用不安全的铸造:

@SuppressWarnings({ "rawtypes", "unchecked" })
public final static <T extends Enum<T> & Rank> Comparator<Card<T>> 
    comparatorByAttribute1() {
    // Your attribute
    return (Comparator) comparatorByAttribute1;
}
@SuppressWarnings({“rawtypes”,“unchecked”})
公共最终静态比较器
comparatorByAttribute1(){
//你的属性
返回(比较器)比较器属性1;
}

我希望比较器适用于每个卡片类别,并且仅适用于特定类别(ActualType)。我只需要限制o1和o2具有相同的泛型。@Petrostssialiamanis:我明白了。不幸的是,Java中没有泛型属性。您必须求助于通用的静态方法(请参阅更新的答案)。或者你可以求助于不安全的演员阵容。为什么这个问题被否决了?这是个不错的问题
@SuppressWarnings({ "rawtypes", "unchecked" })
public final static <T extends Enum<T> & Rank> Comparator<Card<T>> 
    comparatorByAttribute1() {
    // Your attribute
    return (Comparator) comparatorByAttribute1;
}