gpt4 book ai didi

java - 重写通用 equals 方法

转载 作者:行者123 更新时间:2023-12-02 12:11:45 25 4
gpt4 key购买 nike

作为序言,我在提出问题之前查找了许多示例,但找不到任何关于我的问题的解决方案。

我正在尝试在我正在制作的程序中实现通用队列,但卡在某个点上。我制作的程序应该模拟一台打印机,与打印作业排队。有 Queue 类、PrintQueue 类和作业类。 (请务必注意,Job 类由作业 ID 和订购者的字符串组成)。 我已包含一个函数(在 printQueue 类中),其中第一个作业与作业 ID 匹配你输入了,它就会被删除。

但是不幸的是,队列是通用的。这意味着我无法仅使用整数遍历数组来检查相等性,因为它是作业对象队列。为了解决这个问题,我创建了一个具有空白名称和常规 ID 的作业。 Job类有一个equals方法,它判断ID或Owner是否匹配,则为true。但是当我执行代码时,这个类没有被调用。相反,将调用泛型 equals 类,这当然是错误的。在查看了该网站上的许多示例之后,我尝试了所有推荐的解决方案,但这些解决方案对我来说不起作用,因为我的情况(和问题)不同。我可以做什么来重写通用 equals 方法?我下面的代码非常简单,我可以让它在保留上下文的同时重现这个问题。

工作类别

public class Job{
private String owner;
private int jobId;

public Job(String o, int j){
owner = o;
jobId = j;
}
public String getOwner(){
return owner;
}
public int getJobId(){
return jobId;
}
public String toString() {
return owner + " " + jobId + ". ";
}

public boolean equals(Job a) {
if(this.jobId == a.getJobId() || this.owner.equals(a.getOwner())) {
return true;
}
else
System.out.println("nomatch");
return false;
}
}

通用队列类

   import java.util.ArrayList;
public class Queue<T>{
private ArrayList<T> queue;
public Queue() {
queue = new ArrayList<T>();
}
public void enQueue(T obj1) {
queue.add(obj1);
}
public T deQueue() {
if(queue.size() != 0) {
T temp = queue.get(queue.size() - 1);
queue.remove(queue.size() -1);
return temp;
}
else
return null;
}
public int size() {
return queue.size();
}
public boolean isEmpty() {
if (size() == 0) {
return true;
}
else
return false;
}
public int positionOf(T a) {
for(int x = 0; x < queue.size(); x++) {
if(a.equals(queue.get(x))) {
System.out.println("Positionmatch");
return x;
}
}
return -1;
}
}

打印队列类

public class PrintQueue {
Queue<Job> prqueue = new Queue<Job>();
public PrintQueue() {}

public void lprm(int jobID) { //Removes the active job at the front of the queue if jobId matches, error message otherwise
//I can't JUST use jobID to check the position because the queue is a collection of JOBS not JobId's
if (prqueue.positionOf(new Job("",jobID))==0) {
prqueue.deQueue();
}
else if (prqueue.positionOf(new Job("",jobID))== -1) {
System.out.println("Job does not occupy first row.");
}
}
}

我知道这是一个广泛的问题,所以如果您花时间阅读它,非常感谢。如果我能在其他地方找到答案,我就不会问这个问题。

最佳答案

解决方案很简单:您没有在类(class)中覆盖 equals,这是常见的错误。始终使用 @Override 注释您的方法,这样就可以避免此错误。

真正的equals方法采用Object参数,而你的有一个Job作为参数,将其更改为Object code> 然后相应地进行转换。

如果您使用的是 IDE,我建议右键单击 -> 源代码 -> 生成 equals,您将看到一个很好的示例,说明如何执行此操作。

关于java - 重写通用 equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46490552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com