2012-01-27 5 views
1

해당 목록에 개체가 생성되었습니다. 메서드를 사용하여 개체가 이미 있는지 여부를 확인하고 싶습니다. 이를 위해 equals() 메서드를 재정의합니다. 모든 것이 완벽합니다. 그러나 Stringint에 대해 동일한 작업을 시도하면 equals() 무시가 작동하지 않습니다. 왜 이런 식으로? 방금 참조 용 샘플 코드를 게시했습니다.문자열과 Int에 대해 같음

public class Test 
{ 
private int x; 

public Test(int n) 
{ 
x = n; 
} 

public boolean equals(Object o) 
{ 
return false; 
} 

public static void main(String[] args) 
{ 
List<Test> list = new ArrayList<Test>(); 
list.add(new Test(3)); 
System.out.println("Test Contains Object : " + list.contains(new Test(3))); // Prints always false (Equals override) 
List<String> list1 = new ArrayList<String>(); 
list1.add("Testing"); 
String a = "Testing"; 
System.out.println("List1 Contains String : " + list1.contains(a)); // Prints true (Equals override not working) 
} 
} 
+0

입니다. Test 개체에 대해 equals를 명시 적으로 재정의했습니다. –

+0

나는 그 질문을 이해하지 못한다. 당신은 문자열리스트를 가지고 있고,리스트는 당신이 추가 한 문자열을 포함하고,'contains'는 그만큼을 나타냅니다. 'String'에 대해서도 똑같은 일을 할 수없고, String을 확장하려고하면 컴파일되지 않습니다. –

답변

10

String과 Integer는 모두 최종 클래스이므로 서브 클래스로 만들 수 없습니다. 따라서 equals 메서드를 재정의 할 수 없습니다.

그러나 ArrayList의 하위 클래스를 만들고 기존에 포함 된 구현 빌드를 직접 만들 수 있습니다.

+0

심지어 포함 된 메서드를 구현합니다. String 및 Integer를 재정의 할 수 없으며 구현할 필요가 무엇입니까 ?? – Arung

3

정수 또는 문자열의 equals 메서드가 이미 구현되어 잘 작동하므로이를 재정의 할 필요가 없습니다. 당신은 어쨌든 그것을 수행하려는 경우

그러나,이 일을 수행하는 방법 (Delegation Pattern) 다음과 같습니다에 물론

public class MyString { 
    private String myString; 

    @Override 
    public boolean equals(Object o) 
     return false; 
    } 

    // add getter and setter for myString 
    // or delegate needed methods to myString object. 
} 

, 당신은이 클래스를 이용해야하지 String 클래스를 당신의 기울기.

0

당신이 그런 식으로 뭔가를 할 수 Tim 대답에 대해서 :

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class Ideone{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     MyString my = new MyString(); 
     String testString = "bb"; 
     my.setMyString(testString); 
     System.out.println(my.equals(testString)); 
    } 
} 

class MyString { 
    private String myString; 

    @Override 
    public boolean equals(Object o){ 
     return o.equals(myString); 
    } 

    public String getMyString(){ 
     return myString; 
    } 

    public void setMyString(String newString){ 
     myString = newString; 
    } 
} 

출력 당신은 String 객체의 equals 메소드를 오버라이드 (override)하지 않는 true