2013-01-04 73 views
1

我需要在Object的平等方法中對String []進行比較。 下面是我的代碼快照。當我執行這個代碼時,它會給出真實和錯誤,而不是真實和真實。 同樣在我的情況下,Task類爲每個調用生成唯一的ID。 我在做什麼錯?任何建議,將不勝感激。如何用字符串數組覆蓋equals()方法?

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; 
} 

回答

3
@Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     JobTask other = (JobTask)obj; 
     if (!Arrays.equals(args, other.args)) 
      return false; 
     return true; 
    } 
+0

我誤會了。它使我工作。非常感謝。 – user648330

3

你將能夠看到這樣一個調試器,提示,暗示,但

您正在測試

System.out.println(t1.equals(t2)); 

,但你寫

if (! (obj instanceof String[])){ 
     return false;   
     } 

並且因爲t2不是String[]這將返回false。我懷疑你打算寫

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

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

它使我工作。非常感謝。 – user648330

1

equals方法接收JobTask,而不是一個String[]。你需要像這樣重寫它:

@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; 
}