OO acabo de ver cual es el problema, al parecer tiene algo que ver con definir el tipo de objetos que guardara el ArrayList, y como le dije que guardara pelotas, pelotas necesita introducir en contains.
Por lo tanto los códigos quedarían de la siguiente manera.
public class Pelota {
protected String nombre;
protected int precio;
public Pelota(String n, int p) {
nombre = n;
precio = p;
}
public String getNombre() {
return nombre;
}
public boolean equals(Object obj) {
return nombre.equalsIgnoreCase(((Pelota)obj).nombre);
}
}
Clase prueba
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Pelota> pelotas = new ArrayList<Pelota>();
pelotas.add(new Pelota("beis",15));
pelotas.add(new Pelota("fut",10));
pelotas.add(new Pelota("basquet",915));
pelotas.add(new Pelota("volei",159));
System.out.println(pelotas.contains(new Pelota("beis",15)));
}
}
Resultando true.
No fue necesario sobrescribir el método hasCode(), pero de igual modo la manera correcta en la cual deberían quedar la clase Pelota, seria la siguiente.
public class Pelota {
protected String nombre;
protected int precio;
public Pelota(String n, int p) {
nombre = n;
precio = p;
}
public String getNombre() {
return nombre;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pelota other = (Pelota) obj;
if (nombre == null) {
if (other.nombre != null)
return false;
} else if (!nombre.equals(other.nombre))
return false;
return true;
}
}
Ello porque hasCode podría ser invocado al usar métodos de la clase Collections. En fin
Gracias por la ayuda.