Verwenden Sie StringUtils.EMPTY
statt ""
?
Ich meine entweder als Rückgabewert oder wenn Sie den Wert einer String-Variablen festlegen. Ich meine nicht zum Vergleich, weil wir dort verwendenStringUtils.isEmpty()
java
string
apache-commons
keuleJ
quelle
quelle
StringUtils.EMPTY
. Es macht deutlich, dass die Verwendung des leeren Strings beabsichtigt ist und nicht irgendeine Art von Faulheit ("Oh, dies erfordert einen String, lass uns gehen""
"). Wenn jemand diesen Code trifft, überlegt er es sich zweimal, bevor er Änderungen vornimmt. Wenn SieStringUtils.EMPTY
als Ihre eigene Variable definiertMyClass.EMPTY
wären, müssten Sie beispielsweise eine Codezeile ändern, um Änderungen an "dieser Darstellung der Leere" vorzunehmen. Sie können es beispielsweise"<empty>"
anstelle des leeren Strings ändern""
. Aber ich denke, das geht etwas zu weit.EMPTY
hat keine Bedeutung, die die leere Zeichenfolge selbst noch nicht hat. Insbesondere wird nicht dokumentiert, warum Sie sich in diesem speziellen Fall für die Verwendung einer leeren Zeichenfolge entschieden haben. Es ist nicht anders, als eine Konstante zu benennenONE
und so zu tun, als wäre es sinnvoll, diese Konstante anstelle des Werts zu verwenden.Ich verwende
StringUtils.EMPTY
, um das Literal zu verbergen und um auszudrücken, dassreturn StringUtils.EMPTY
es vollständig erwartet wurde und eine leere Zeichenfolge zurückgegeben werden sollte,""
kann dies zu der Annahme führen, dass""
es leicht in etwas anderes geändert werden kann und dass dies möglicherweise nur ein Fehler war. Ich denke dasEMPTY
ist ausdrucksvoller.quelle
StringUtils.EMPTY
weniger ausdrucksstark als""
.""
ausdrucksstärker als die VerwendungStringUtils.EMPTY
, und was Sie gesagt haben, hat meine Meinung dazu nicht geändert. Ich kann fast glauben, dass Entwickler sehr, sehr gelegentlich falsch ein leeres String-Literal geschrieben haben - aber ich werde die Klarheit des String-Literal über die einmalige Million nehmen (und hoffentlich beim Testen leicht zu finden sein ... ) Fehler, persönlich.Nein, einfach benutzen
""
.Das Wort
""
ist kristallklar. Es gibt kein Missverständnis darüber, was gemeint war. Ich würde nicht wissen, warum Sie dafür eine Klassenkonstante benötigen würden. Ich kann nur davon ausgehen, dass diese Konstante im gesamten Paket verwendet wird, dasStringUtils
statt enthält""
. Das heißt aber nicht, dass Sie es verwenden sollten.Wenn sich auf dem Bürgersteig ein Stein befindet, müssen Sie ihn nicht werfen.
quelle
Ich bin erstaunt darüber, wie viele Menschen gerne blind annehmen, dass "" tatsächlich eine leere Zeichenfolge ist und (aus Versehen?) Keine der wunderbaren unsichtbaren und nicht räumlichen Zeichen von Unicode enthält. Verwenden Sie für die Liebe zu allem, was gut und anständig ist, LEER, wann immer Sie können.
quelle
Ich werde meine zwei Cent hier hinzufügen, weil ich niemanden sehe, der über
String
Internierung und Klasseninitialisierung spricht :String
Literale in Java Quellen sind internieren, so dass jeder""
undStringUtils.EMPTY
das gleiche ObjektStringUtils.EMPTY
kann dieStringUtils
Klasse initialisiert werden , da sieEMPTY
nur dannfinal
auf ihr statisches Element zugreift, wenn sie nicht deklariert ist (das JLS ist in diesem Punkt spezifisch). Ist jedoch endgültig, sodass die Klasse nicht initialisiert wird.org.apache.commons.lang3.StringUtils.EMPTY
Hier finden Sie eine ähnliche Antwort auf String Internierung und auf Klasse Initialisierung , die sich auf die JLS 12.4.1 .
quelle
StringUtils
Klasse führen.Ich benutze es nicht wirklich gerne, da
return "";
es kürzer ist alsreturn StringUtils.EMPTY
.Ein falscher Vorteil der Verwendung besteht jedoch darin, dass bei einer Eingabe
return " ";
anstelle vonreturn "";
möglicherweise ein anderes Verhalten auftritt (unabhängig davon, ob Sie eine leere Zeichenfolge korrekt testen oder nicht).quelle
""
, ich hasse es, dieselbe wörtliche Zeichenfolge mehr als einmal zu tippen, sogar einmal nur manchmal. Ich würde Konstanten lieber in Constants.java deklarieren , aber nicht überall im Quellcode wiederholen.return "";
ist hässlich, ich bevorzuge die Verwendung von returnStringUtil.EMPTY
(deklariert in meiner eigenen Klasse StringUtil , NICHT Apaches StringUtils ).Wenn Ihre Klasse nichts anderes von Commons verwendet, wäre es schade, diese Abhängigkeit nur für diesen magischen Wert zu haben.
Der Designer der StringUtils nutzt diese Konstante intensiv und es ist das Richtige, aber das bedeutet nicht, dass Sie sie auch verwenden sollten.
quelle
Ehrlich gesagt sehe ich auch nicht viel Verwendung davon. Wenn Sie beispielsweise eine leere Zeichenfolge vergleichen möchten, verwenden Sie einfach
StringUtils.isNotEmpty(..)
quelle
StringUtils.isNotEmpty(..)
führt auch einen Nullcheck durch, sodass dies nicht genau dem Vergleich mit einer leeren Zeichenfolge entspricht.null
? alsequals
false
isNotEmpty
ist das Gegenteil von"".equals(…)
der Tatsache, dass esnull
wie die leere Zeichenfolge behandelt wird, unterscheidet sich vom Vergleich mit einer leeren Zeichenfolge,"".equals("")
→true
,"".equals(null)
→false
,StringUtils.isNotEmpty("")
→false
,StringUtils.isNotEmpty(null)
→false
. Wenn Sie nur wissen möchten, ob eine Zeichenfolge leer ist, verwenden Siestring.isEmpty()
, was das richtige Verhalten hat,true
wenn es sich um eine leere Zeichenfolge handelt, undNullPointerException
wenn eine Zeichenfolge ausgegeben wird, wirdnull
...Ich finde
StringUtils.EMPTY
in einigen Fällen nützlich für die Lesbarkeit. Besonders mit:Ternärer Operator z.
Auch unter Verwendung einer Konstante wird ein Verweis auf
StringUtils.EMPTY
erstellt. Andernfalls, wenn Sie versuchen, das String-Literal""
jedes Mal zu instanziieren, muss die JVM prüfen, ob es bereits im String-Pool vorhanden ist (was wahrscheinlich der Fall ist, sodass kein zusätzlicher Aufwand für die Instanzerstellung anfällt). SicherlichStringUtils.EMPTY
vermeidet die Verwendung die Notwendigkeit, den String-Pool zu überprüfen?quelle
StringUtils.EMPTY
Konstante zur Kompilierungszeit aufgelöst wird.StringUtil.EMPTY
es sich um eine Konstante zur Kompilierungszeit handelt, wird ein Verweis darauf mit genau demselben Bytecode kompiliert wie bei""
direkter Verwendung . Außerdem verstehe ich nicht, warum der ternäre Operator einen Unterschied machen sollte. Es ist ein Ausdruck wie jeder andere. Jeder Grund, eine benannte Konstante zu verwenden oder nicht zu verwenden, gilt auch für den ternären Operator.Nein, weil ich mehr zu schreiben habe. Und ein leerer String ist plattformunabhängig leer (in Java).
File.separator
ist besser als "/" oder "\".Aber mach was du willst. Sie können keinen Tippfehler wie bekommen
return " ";
quelle
someString.isEmpty()
stattdessen.Ja, das macht Sinn. Es ist vielleicht nicht der einzige Weg, aber ich kann sehr wenig daran erkennen, dass dies "keinen Sinn ergibt".
Meiner Meinung nach:
quelle
It will still require changing everywhere if you don't define your own variable and use it in multiple places.
Sie werden eine leere Zeichenfolge in eine andere leere Zeichenfolge ändern?