2012-01-27 7 views
1

私はそのリストにリストを持っています。オブジェクトを作成しました。 メソッドを使って、オブジェクトがすでに存在するかどうかをチェックしたいと思います。そのために、私はequals()メソッドをオーバーライドします。すべてはこれまで完璧です。しかし、私がStringintについて同じことをしようとすると、equals()オーバーライドは機能しません。なぜそれはこのようなものですか?私はちょうど参照のためのいくつかのサンプルコードを投稿した。Stringと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

私は、私は文字列と整数をオーバーライドすることはできませんどのような実装する必要は何ですか? – Arung

3

IntegerまたはStringのequalsメソッドをオーバーライドする必要はありません。既に実装されており、正常に機能しているためです。その後、あなたはStringクラスがあなたに、このクラスではなく使用している必要があり、もちろん

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

:あなたはとにかくそれをしたい場合は

しかし、これはそれを行うための一つの方法(Delegation Pattern)になりますリスト。

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メソッドをオーバーライドしていない true

関連する問題