2010-07-13 7 views
9

¿Hay alguna manera de que pueda hacer que Eclipse destaque el uso del operador == para probar la igualdad de cadenas? Sigo utilizándolo por error en lugar de llamar al .equals().Resalte cuando el operador de igualdad (==) se utiliza para las comparaciones de cadenas en Eclipse

Me gustaría hacer una advertencia y requerir una anotación @SuppressWarnings para eliminarla, en el caso de que suceda, quiero comparar cadenas para igualdad de objetos.

¿Hay alguna herramienta que pueda usar para ayudar a romper este mal hábito en el tiempo de edición?

Respuesta

10

Use una herramienta como static analysisFindBugs, PMD, o CheckStyle.

hay plugins de Eclipse para cada uno, junto con las tareas Ant, Maven plugins, etc.

Cada uno de éstos tiene reglas relativas a la igualdad de cuerdas (Findbugs rule, PMD rule, Checkstyle rule).

+1

Definitivamente el segundo uso de Findbugs para Eclipse ... ha sido una bendición para detectar estos pequeños problemas de codificación. – mikera

+1

todos estos son geniales, especialmente cuando se usan juntos en un servidor de integración continua como hudson (siempre que la gente realmente vea los resultados :-)) –

+1

¿sabe si alguno de ellos se ejecuta en tiempo de edición? ya estamos ejecutando un par de estos como parte de compilaciones nocturnas y generando archivos de informes. quiero algo que resalte el error/advertencia a medida que escribo. –

5

La respuesta obvia a la pregunta has already been given, pero aquí hay una advertencia que no es una respuesta directa: obj.equals también puede fallar si obj es nulo. Por lo que a menudo tiene que utilizar un código como éste:

if(mystr1 != null && mystr1.equals(mystr2)) 

porque este

if(mystr1.equals(mystr2)) 

fallarían con una NullPointerException si mystr1 es nulo.

Por eso, cuando la cadena de comparación es una constante, la siguiente sintaxis conocido es de uso frecuente:

if("ABCDEF".equals(mystr1)) 

en lugar de

if(mystr1.equals("ABCDEF")) 

Por esta razón, muchas bibliotecas (como apache commons/lang) proporcionar funciones de utilidad que combinen estas verificaciones:

// this is the definition of org.apache.commons.lang.StringUtils.equals(String, String) 
public static boolean equals(String str1, String str2) { 
    return str1 == null ? str2 == null : str1.equals(str2); 
} 

// this is the definition of org.apache.commons.lang.ObjectUtils.equals(Object, Object) 
public static boolean equals(Object object1, Object object2) { 
    if (object1 == object2) { 
     return true; 
    } 
    if ((object1 == null) || (object2 == null)) { 
     return false; 
    } 
    return object1.equals(object2); 
} 

El uso de estos métodos es generalmente más seguro que los iguales de fricción, a menos que sepa con certeza que uno de los dos objetos no es nulo

1

estoy de acuerdo con las respuestas anteriores - que es un error en Eclipse y se puede votar por ella aquí: https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095.

Eclipse puede muy bien advertir que cuando se compara con cadenas == ya que esto rara vez es lo que quería (o lo que el autor original quería).

Cuestiones relacionadas