Java 泛型类型和自身比较器
我对优先级队列和比较器中的泛型类型有问题,因为我不知道如何重新键入 当我调用compare(IRecord t,IRecord t1)`方法时,它需要IRecord对象,但我需要compare泛型类型 类AbstrPriorQueue必须是泛型 有一个比较器可用于对象IRecord: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
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());
你可以从“全英语”代码开始(因为这有助于吸引更多观众)。你可以从“全英语”代码开始(因为这有助于吸引更多观众)。