2013-04-15 5 views
0

버텍스 변수 같음을 재정의하려고합니다. 현재 vertexList.contains ("test")가 호출 될 때 정점 클래스에서 선언 된 equals()는 실행되지 않습니다. 내가 빠진 것이 있습니까?Java override 사용자 정의 클래스의 equals()

빠른 코드 테스트 파일 UI.java와 함께 전체 코드는 내 git hub에서 찾을 수 있습니다. 그렇지 않으면 나는 아이디어가 없습니다.
감사, 개체에 대해 Stringequals() 방법을 실행합니다 vertexList.contains("test") 실행

class Data implements Graph 
{ 
    java.util.LinkedList<vertex> vertexList = new java.util.LinkedList<vertex>(); 

    class vertex 
    { 
     String ID; 
     java.util.LinkedList<String> links = new java.util.LinkedList<String>(); 
     boolean tracker = false; 

     public vertex(String it) 
     { 
      ID = it; 
     } 

     @Override 
     public boolean equals(Object obj) 
     { 
      if (obj.equals(null)) 
       return false; 
      System.err.println("OBJECT CHECK"); 
      String str = (String) obj; 
      // return true; //To test if it's being accessed 
      return str.equals(ID); 
     } 

     public String toString() 
     { 
      return ID; 
     } 
    } 
} 
+0

당신이 정점 클래스를 확장하는 것을 잊지나요? 네가 여기서 성취하려고하는 것이 확실하지 않니? 부모 클래스를 확장/구현하지 않는 경우 메서드를 재정의 할 수 없습니다. – blearn

+0

아마, 꼭지점이 개체를 확장해야합니까? 테스트 됨, java에 포함됩니다. – Monoxide

+0

이미 객체를 확장합니다 –

답변

1

. linkedList.contains(new Vertex("a"));을 찾고 있습니다. equals() 메서드를 대상 객체에 대해 실행합니다. 다음은 에 대한 연결 목록 impl입니다. 여기서 o은 검색 대상입니다.

 for (Entry e = header.next; e != header; e = e.next) { 
      if (o.equals(e.element)) 
       return index; 
      index++; 
     } 

또한 Vertex 대신 equals() 방법에 String 확인해야합니다. 그것이 의미하는 바입니다. Vertex이 다른 것과 동일한 지 확인해야합니다.

+0

Genius! 그것은 String.equals()를 사용하고있었습니다. 나는 그것을 vertexList.contains (새로운 vertex ("test"))로 변경하고 equals() 메서드를 변경하여 두 정점의 ID를 비교했습니다. – Monoxide

0

이 줄에서 무엇을하려고합니까? 내가 제대로 코드의 목적을 이해하면

String str = (String) obj; 

, 나는 당신의 equals 메소드는 더 같이해야한다고 생각 :

@Override 
public boolean equals(Object obj){ 
if(obj != null && obj.getClass().equals(this.getClass()){ 
    return ((vertex)obj).toString().equals(this.ID) 
    } else { 
    return false; 
    } 
} 
관련 문제