Java 泛型类型和自身比较器

Java 泛型类型和自身比较器,java,generics,comparator,Java,Generics,Comparator,我对优先级队列和比较器中的泛型类型有问题,因为我不知道如何重新键入 当我调用compare(IRecord t,IRecord t1)`方法时,它需要IRecord对象,但我需要compare泛型类型 类AbstrPriorQueue必须是泛型 有一个比较器可用于对象IRecord: public class MyComparator implements Comparator<IZaznam> { @Override public int compare(IRecord t, I

我对优先级队列和比较器中的泛型类型有问题,因为我不知道如何重新键入

当我调用compare(IRecord t,IRecord t1)`方法时,它需要IRecord对象,但我需要compare泛型类型

类AbstrPriorQueue必须是泛型

有一个比较器可用于对象IRecord:

public class MyComparator implements Comparator<IZaznam> {

@Override
public int compare(IRecord t, IRecord t1) {
    if (t.getPriority() < t1.getPriority()) {
        return -1;
    } else if (t.getPriority() > t1.getPriority()) {
        return 1;
    } else {
        return 0;
    }
  } 
}
公共类MyComparator实现Comparator{
@凌驾
公共整数比较(IRecord t、IRecord t1){
if(t.getPriority()t1.getPriority()){
返回1;
}否则{
返回0;
}
} 
}
这是我缩短的隐修会队列。我给出了构造函数中的比较器。IAbstrPriorQueue是唯一的接口

public class AbstrPriorQueue<T> implements IAbstrPriorQueue<T> {
    // comparator
    private MyComparator myComparator;

    public AbstrPriorQueue(MyComparator myComparator) {
          this.myComparator = myComparator;
    }

    @Override
    public void insert(T data) {
          T temp = list.getLast();

          // there is a error (no suitable method found for compare(T,T))
          if (myComparator.compare(data, temp) <= 0) {
                // ....
          }
    }
}
公共类AbstrProorQueue实现IABSTRProorQueue{
//比较器
私人MyComparator MyComparator;
公共队列(MyCompator MyCompator){
this.myComparator=myComparator;
}
@凌驾
公共空白插入(T数据){
T temp=list.getLast();
//存在错误(未找到合适的比较方法(T,T))

如果(myComparator.compare(data,temp)您有一个误解:您不能对未知的泛型类型的元素使用固定的比较器

你有一个比较器,只对苹果有效;但是你想在一个可以接受各种东西的盒子里使用它。苹果比较器怎么知道如何比较香蕉?还是鸡蛋

因此,一种可能的方法是将“盒子”改为只接受苹果

public class AbstrPriorQueue<T extends IZaznam> 
公共类AbstrProorQueue
比如说

意思是:你必须明确你的队列只接受IzazNames的东西。或者你不能使用特定的比较器。一种方式或者另一种方式。你不能两种方式都有

但最有可能的情况是,您希望使用另一种方法:使用一个同样是通用的比较器

public class AbstrPriorQueue<T> ... {
  private final Comparator<T> komparator;
  ...
公共类AbstrProorQueue{
私人最终比较器;
...
你看,实际上,不需要在这个级别上固定比较器的类型

现在你可以选择:

AbstrPriorQueue<IZazname> izazies = new AbstrPriorQueuey<>(new Komparator());
AbstrPriorQueue-izazies=new AbstrPriorQueuey(new Komparator());

您有一个误解:您不能对未知泛型类型的元素使用固定的比较器

你有一个比较器,只对苹果有效;但是你想在一个可以接受各种东西的盒子里使用它。苹果比较器怎么知道如何比较香蕉?还是鸡蛋

因此,一种可能的方法是将“盒子”改为只接受苹果

public class AbstrPriorQueue<T extends IZaznam> 
公共类AbstrProorQueue
比如说

意思是:你必须明确你的队列只接受IzazNames的东西。或者你不能使用特定的比较器。一种方式或者另一种方式。你不能两种方式都有

但最有可能的情况是,您希望使用另一种方法:使用一个同样是通用的比较器

public class AbstrPriorQueue<T> ... {
  private final Comparator<T> komparator;
  ...
公共类AbstrProorQueue{
私人最终比较器;
...
你看,实际上,不需要在这个级别上固定比较器的类型

现在你可以选择:

AbstrPriorQueue<IZazname> izazies = new AbstrPriorQueuey<>(new Komparator());
AbstrPriorQueue-izazies=new AbstrPriorQueuey(new Komparator());

你可以从“全英语”代码开始(因为这有助于吸引更多观众)。你可以从“全英语”代码开始(因为这有助于吸引更多观众)。