如何重写java.util.PriorityQueue contains函数?

如何重写java.util.PriorityQueue contains函数?,java,generics,overriding,Java,Generics,Overriding,我有一个PriorityQueue,它包含box类型的对象,这是我自己的类。如何通过只查看对象框的一个属性来覆盖contains函数以返回true?如果我理解正确,您希望这样: public class BoxPriorityQueue extends PriorityQueue<Box> { @Override public boolean contains(Object obj) { if (!(obj instanceof Box)) {

我有一个PriorityQueue,它包含box类型的对象,这是我自己的类。如何通过只查看对象框的一个属性来覆盖contains函数以返回true?

如果我理解正确,您希望这样:

public class BoxPriorityQueue extends PriorityQueue<Box> {
    @Override
    public boolean contains(Object obj) {
        if (!(obj instanceof Box)) {
            return false;
        }
        Box box = (Box) obj;
        return box.getAttribute();
    }
}
公共类BoxPriorityQueue扩展了PriorityQueue{
@凌驾
公共布尔包含(对象obj){
如果(!(框的obj实例)){
返回false;
}
Box=(Box)obj;
return box.getAttribute();
}
}

不幸的是,泛型不适用于
contains()
方法,因此必须强制转换它。此
BoxPriorityQueue
将只接受
Box
对象,因为它扩展了
PriorityQueue

您应该首先在obj上使用instanceof check来防止ClassCastException:if(!(obj instanceof Box))返回false。。。方法的其余部分…@LES2:是的,我在答案中添加了一个
instanceof
复选框。不过,它可能会影响优先级队列,因为它可能依赖于它包含的Box实例的hashCode和equals方法来完成其他事情。您不能为PriorityQueue提供一个比较器(或者实现Comparable),然后在其中执行自定义逻辑吗?为这样一件小事创建子类似乎是不对的。:)我同意@LES2,你不应该覆盖包含。。。使用比较器。