¿Usas en StringUtils.EMPTY
lugar de ""
?
Me refiero a como valor de retorno o si establece el valor de una variable de cadena. No me refiero a la comparación, porque allí usamosStringUtils.isEmpty()
Respuestas:
Por supuesto no. ¿De verdad crees que "" no es lo suficientemente claro?
Las constantes tienen esencialmente 3 casos de uso:
Ninguno se aplica aquí.
EMPTY
no tiene ningún significado que la cadena vacía en sí misma no tenga. En particular, no documenta por qué decidió usar una cadena vacía en ese caso en particular. No es diferente a nombrar una constante ONE
y pretender que tenía un sentido usar esa constante en lugar del valor.
Utilizo StringUtils.EMPTY
, para ocultar el literal y también para expresar que return StringUtils.EMPTY
se esperaba completamente y que debería devolver una cadena vacía, ""
puede llevar a la suposición de que ""
se puede cambiar fácilmente a otra cosa y que esto tal vez fue solo un error. Creo que EMPTY
es más expresivo.
StringUtils.EMPTY
menos expresivo que ""
.
""
ser más expresivo que el uso StringUtils.EMPTY
, y lo que has dicho no ha cambiado de opinión al respecto. Casi puedo creer que los desarrolladores han escrito incorrectamente un literal de cadena vacía muy, muy ocasionalmente , pero tomaré la claridad del literal de cadena sobre el de una vez en un millón (y se encontrará fácilmente en las pruebas, con suerte ... ) error, personalmente.
No, solo usa ""
.
Lo literal ""
es claro como el cristal. No hay ningún malentendido en cuanto a lo que se quiso decir. No sabría por qué necesitarías una constante de clase para eso. Solo puedo asumir que esta constante se usa en todo el paquete que contiene en StringUtils
lugar de ""
. Sin embargo, eso no significa que debas usarlo.
Si hay una piedra en la acera, no es necesario que la arrojes.
Estoy asombrado de cuántas personas están felices de asumir ciegamente que "" es de hecho una cadena vacía y no contiene (¿accidentalmente?) Ninguno de los maravillosos caracteres invisibles y sin espacios de Unicode. Por amor a todo lo que es bueno y decente, use EMPTY siempre que pueda.
Agregaré mis dos centavos aquí porque no veo a nadie hablando sobre String
pasantías e inicialización de clases:
String
literales en las fuentes de Java son internados, por lo que cualquier ""
y StringUtils.EMPTY
el mismo objetoStringUtils.EMPTY
puede inicializar la StringUtils
clase, ya que accede a su miembro estático EMPTY
solo si no está declaradofinal
(el JLS es específico en ese punto). Sin embargo, es final, por lo que no inicializará la clase.org.apache.commons.lang3.StringUtils.EMPTY
Consulte una respuesta relacionada sobre la internación de cadenas y la inicialización de clases , refiriéndose a JLS 12.4.1 .
StringUtils
clase.
Realmente no me gusta usarlo, ya que return "";
es más corto que return StringUtils.EMPTY
.
Sin embargo, una falsa ventaja de usarlo es que si escribe en return " ";
lugar de return "";
, puede encontrar un comportamiento diferente (con respecto a si prueba correctamente una Cadena vacía o no).
""
, odio escribir la misma cadena literal más de una vez, incluso una sola vez. Prefiero declarar constantes en Constants.java , pero no repetirlas en todas partes en el código fuente.
return "";
es feo, PREFIERO utilizar retorno StringUtil.EMPTY
(declarado en mi propia clase StringUtil , de NO Apache StringUtils ).
Si su clase no usa nada más de los comunes, sería una pena tener esta dependencia solo por este valor mágico.
El diseñador de StringUtils hace un uso intensivo de esta constante, y es lo correcto, pero eso no significa que tú también debas usarla.
Honestamente, no veo mucho uso de ninguno de los dos. Si desea comparar econtra una cadena vacía, simplemente useStringUtils.isNotEmpty(..)
StringUtils.isNotEmpty(..)
también realiza una verificación nula, por lo que no es exactamente lo mismo que comparar con una cadena vacía.
null
? como segundo argumento de equals
, pero el resultado será el mismo -false
isNotEmpty
es lo contrario de "".equals(…)
, por lo tanto, el hecho de que tratará null
como la cadena vacía es diferente a comparar con una cadena vacía, "".equals("")
→ true
, "".equals(null)
→ false
, StringUtils.isNotEmpty("")
→ false
, StringUtils.isNotEmpty(null)
→ false
. Si solo desea saber si una cadena está vacía, use string.isEmpty()
, que tiene el comportamiento correcto de devolver true
si es una cadena vacía y lanzar un NullPointerException
si la cadena es null
…
Encuentro StringUtils.EMPTY
útil en algunos casos por legibilidad. Particularmente con:
Operador ternario, por ejemplo.
item.getId() != null ? item.getId() : StringUtils.EMPTY;
También al usar una constante, StringUtils.EMPTY
se crea una referencia a . De lo contrario, si intenta crear una instancia del literal de cadena ""
cada vez, la JVM tendrá que verificar si ya existe en el grupo de cadenas (lo que probablemente ocurrirá, por lo que no habrá gastos adicionales de creación de instancias). ¿Seguramente el uso StringUtils.EMPTY
evita la necesidad de verificar el grupo de cadenas?
StringUtils.EMPTY
constante se resuelve en tiempo de compilación.
StringUtil.EMPTY
es una constante en tiempo de compilación, una referencia a ella se compila exactamente en el mismo código de bytes que se usa ""
directamente. Además, no veo por qué el operador ternario debería hacer alguna diferencia. Es una expresión como cualquier otra. Cualquier motivo para usar o no una constante con nombre también se aplica al operador ternario.
No, porque tengo más que escribir. Y una cadena vacía es independiente de la plataforma vacía (en Java).
File.separator
es mejor que "/" o "\".
Pero haz lo que quieras. No puedes obtener un error tipográfico comoreturn " ";
someString.isEmpty()
lugar.
Sí, tiene sentido. Puede que no sea el único camino a seguir, pero puedo ver muy poco en la forma de decir que esto "no tiene sentido".
En mi opinión:
It will still require changing everywhere if you don't define your own variable and use it in multiple places.
¿Vas a cambiar una cadena vacía por una cadena vacía diferente?
StringUtils.EMPTY
. Deja en claro que el uso de String vacío es intencionado, y no una especie de pereza ("Oh, esto requiere un String, pasemos""
"). Si alguien pulsa este código, lo pensará dos veces antes de realizar cambios. Además, siStringUtils.EMPTY
se definiera como su propia variable, comoMyClass.EMPTY
, hacer cambios en "esa representación del vacío" requeriría cambiar una línea de código. Por ejemplo, podría cambiarlo a en"<empty>"
lugar del String vacío""
. Pero, creo que esto va demasiado lejos.