A volte si da abbastanza per scontata la comparazione di oggetti e spesso capita che comparando un Array di oggetti da noi creati, al momento in cui si richiama il metodo "equals()" o "contains()" questi ritornino il valore errato, oppure in altri contesti si vuole effettuare la comparativa tra 2 oggetti appartenenti alla stessa classe.
Ecco quindi la necessità di effettuare l'Override del metodo equals()
Un rapido esempio:
1
2package com.cesco.dell;
3
4public class Item {
5
6private String mStringOne;
7private String mStringTwo;
8
9//////////////////////
10// --CONSTRUCTORS-- //
11//////////////////////
12
13public Item() {
14// TODO Auto-generated constructor stub
15}
16
17public Item (String s1, String s2) {
18this.mStringOne = s1;
19this.mStringTwo = s2;
20}
21
22/////////////////////////
23// --EQUALS OVERRIDE-- //
24/////////////////////////
25
26
27public boolean equals(Object o) {
28if(o instanceof Item) {
29Item temp = (Item) o;
30if(this.mStringOne == temp.mStringOne && this.mStringTwo == temp.mStringTwo) {
31return true;
32}
33}
34return false;
35}
36
37/////////////////
38// --SETTERS-- //
39/////////////////
40
41public void setStringOne(String s) {
42this.mStringOne = s;
43}
44
45public void setStringTwo(String s) {
46this.mStringTwo = s;
47}
48
49/////////////////
50// --GETTERS-- //
51/////////////////
52
53public String getStringOne() {
54return this.mStringOne;
55}
56
57public String getStringTwo() {
58return this.mStringTwo;
59}
60
61}
62
63
Quando noi andremo a richiamare il metodo equals() come ad esempio:
101
2Item mItem1;
3Item mItem2;
4
5...
6
7if(mItem1.equals(mItem2)) {
8//Do stuff
9}
10
verrà utilizzato quello da noi "sovrascritto"
Stessa cosa vale per il metodo "contains()" per gli Array, in quanto questo metodo, per ogni oggetto presente effettuerà la comparazione usando il metodo "equals()" da noi creato.
Esempio:
101
2ArrayList<Item> list = new ArrayList<Item>();
3Item mItem;
4
5...
6
7if(list.contains(mItem)) {
8//Do stuff
9}
10
Enjoy![]()