¿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()
java
string
apache-commons
keuleJ
fuente
fuente
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.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 constanteONE
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 quereturn 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 queEMPTY
es más expresivo.fuente
StringUtils.EMPTY
menos expresivo que""
.""
ser más expresivo que el usoStringUtils.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 enStringUtils
lugar de""
. Sin embargo, eso no significa que debas usarlo.Si hay una piedra en la acera, no es necesario que la arrojes.
fuente
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.
fuente
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""
yStringUtils.EMPTY
el mismo objetoStringUtils.EMPTY
puede inicializar laStringUtils
clase, ya que accede a su miembro estáticoEMPTY
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 .
fuente
StringUtils
clase.Realmente no me gusta usarlo, ya que
return "";
es más corto quereturn StringUtils.EMPTY
.Sin embargo, una falsa ventaja de usarlo es que si escribe en
return " ";
lugar dereturn "";
, puede encontrar un comportamiento diferente (con respecto a si prueba correctamente una Cadena vacía o no).fuente
""
, 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 retornoStringUtil.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.
fuente
Honestamente, no veo mucho uso de ninguno de los dos. Si desea comparar econtra una cadena vacía, simplemente use
StringUtils.isNotEmpty(..)
fuente
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 deequals
, 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, usestring.isEmpty()
, que tiene el comportamiento correcto de devolvertrue
si es una cadena vacía y lanzar unNullPointerException
si la cadena esnull
…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 usoStringUtils.EMPTY
evita la necesidad de verificar el grupo de cadenas?fuente
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 como
return " ";
fuente
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:
fuente
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?