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