Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为具有字符串数组的类重写equals()?_Java - Fatal编程技术网

Java 如何为具有字符串数组的类重写equals()?

Java 如何为具有字符串数组的类重写equals()?,java,Java,我需要澄清Object的equal方法中的String[]比较。 下面是我的代码快照。当我执行这段代码时,它给出的是true和false,而不是true和true。 同样在我的例子中,任务类为每个调用生成唯一的id。 我做错了什么?如有任何建议,将不胜感激 public class JobTask extends Task { String[] args; public WFTask(String[] args) { this.args = args;

我需要澄清Object的equal方法中的String[]比较。 下面是我的代码快照。当我执行这段代码时,它给出的是true和false,而不是true和true。 同样在我的例子中,任务类为每个调用生成唯一的id。 我做错了什么?如有任何建议,将不胜感激

public class JobTask extends Task {

    String[] args;

    public WFTask(String[] args) {
        this.args = args;
    }
    @Override
    public boolean equals(Object obj) {        
            if (! ( obj instanceof String[] ) ){
            return false;           
            }
            String[]  arguments = (String[] ) obj;
            boolean ret = Arrays.equals(this.args , arguments );
            return ret;
    }
    @Override
    public void execute(TaskExecutionContext context) throws RuntimeException {
            --------------
            --------------
    }
    public static void main(String[] args) {
            String[] arg1 = {"a","b","c"};
            String[] arg2 = {"a","b","c"};
            System.out.println( Arrays.equals(arg1,arg2));
            JobTask t1 = new JobTask(arg1);
            JobTask t2 = new JobTask(arg2);
            System.out.println( t1.equals(t2));
    }
}

public abstract class Task {
    private Object id = GUIDGenerator.generate();
    public Task() {
    }
    Object getId() {
       return id;
    }
    public abstract void execute(TaskExecutionContext context)                  throws RuntimeException;
}

您可以在调试器、提示、提示中看到这一点,但是

你在测试

System.out.println( t1.equals(t2));
但是你已经写信了

    if (! ( obj instanceof String[] ) ){
        return false;           
        }
由于t2不是
字符串[]
,因此将返回false。我怀疑你打算写信

    if (!(obj instanceof JobTask))
        return false;           

    JobTask other= (JobTask ) obj;
    return Arrays.equals(this.args , other.args);

您可以在调试器、提示、提示中看到这一点,但是

你在测试

System.out.println( t1.equals(t2));
但是你已经写信了

    if (! ( obj instanceof String[] ) ){
        return false;           
        }
由于t2不是
字符串[]
,因此将返回false。我怀疑你打算写信

    if (!(obj instanceof JobTask))
        return false;           

    JobTask other= (JobTask ) obj;
    return Arrays.equals(this.args , other.args);

您的
equals
方法接收的是
jobstask
,而不是
字符串[]
。您需要像这样重写它,例如:

@Override
public boolean equals(Object obj) {
    if (! ( obj instanceof JobTask ) ){
        return false;
    }
    String[]  arguments = ((JobTask) obj).args;
    boolean ret = Arrays.equals(this.args , arguments );
    return ret;
}

您的
equals
方法接收的是
jobstask
,而不是
字符串[]
。您需要像这样重写它,例如:

@Override
public boolean equals(Object obj) {
    if (! ( obj instanceof JobTask ) ){
        return false;
    }
    String[]  arguments = ((JobTask) obj).args;
    boolean ret = Arrays.equals(this.args , arguments );
    return ret;
}