Tengo un problema al hacer que una ArrayList use correctamente un valor igual a anulado. el problema es que estoy tratando de usar los equivalentes para probar solo un campo clave único, y usar ArrayList.contains() para probar la existencia de un objeto con el campo correcto. Aquí hay un ejemploArrayList que no utiliza el reemplazado es igual a
public class TestClass {
private static class InnerClass{
private final String testKey;
//data and such
InnerClass(String testKey, int dataStuff) {
this.testKey =testKey;
//etc
}
@Override
public boolean equals (Object in) {
System.out.println("reached here");
if(in == null) {
return false;
}else if(in instanceof String) {
String inString = (String) in;
return testKey == null ? false : testKey.equals(inString);
}else {
return false;
}
}
}
public static void main(String[] args) {
ArrayList<InnerClass> objectList = new ArrayList<InnerClass>();
//add some entries
objectList.add(new InnerClass("UNIQUE ID1", 42));
System.out.println(objectList.contains("UNIQUE ID1"));
}
}
Lo que me preocupa es que no sólo estoy recibiendo falsa en la salida, pero tampoco estoy poniendo la salida "llegado aquí".
¿Alguien tiene alguna idea de por qué esta anulación se ignora por completo? ¿Hay alguna sutileza con las anulaciones y las clases internas que no conozco?
Editar: Tengo problemas con el sitio, por lo que parece que no puedo marcar la respuesta. Gracias por la respuesta rápida: sí, un descuido de mi parte que es el String .equals que se llama, no el mío. Supongo que son cheques pasados de moda por ahora
Gracias. Esa sugerencia sobre la nueva InnerClass() fue realmente útil también. :) – Sufian
En mi opinión, la implementación de indexOf debería ser al revés: elementData [i] .equals (o) ... – marcolopes