Benutzt du StringUtils.EMPTY
Anstatt von ""
?
Ich meine entweder als Rückgabewert oder wenn Sie den Wert einer String-Variablen setzen. Ich meine nicht zum Vergleich, denn da verwenden wir StringUtils.isEmpty()
keuleJ
Benutzt du StringUtils.EMPTY
Anstatt von ""
?
Ich meine entweder als Rückgabewert oder wenn Sie den Wert einer String-Variablen setzen. Ich meine nicht zum Vergleich, denn da verwenden wir StringUtils.isEmpty()
David Pierre
Natürlich nicht. Glaubst du wirklich, dass “” nicht klar genug ist?
Konstanten haben im Wesentlichen 3 Anwendungsfälle:
Hier trifft keine zu.
Ich sehe immer noch einen kleinen und seltenen Anwendungsfall für StringUtils.EMPTY
. Es macht deutlich, dass die Verwendung des leeren Strings beabsichtigt ist und nicht irgendeine Art von Faulheit (“Oh, das erfordert einen String, gehen wir weiter ""
“). Wenn jemand auf dieses Stück Code trifft, wird er es sich zweimal überlegen, bevor er Änderungen vornimmt. Auch wenn StringUtils.EMPTY
wurden als Ihre eigene Variable definiert, wie MyClass.EMPTY
, würde eine Änderung an “dieser Darstellung der Leere” die Änderung einer Codezeile erfordern. Sie können es zum Beispiel ändern in "<empty>"
anstelle des leeren Strings ""
. Aber ich denke, das geht ein bisschen zu weit.
– Timmos
22. Januar 2014 um 9:09 Uhr
Endlich habe ich ein vernünftiges Argument, an das ich Eiferer weiterleiten kann, anstatt jedes Mal alleine zu denken. Vielen Dank.
– Alex
15. Dezember 2015 um 16:52 Uhr
Inwiefern fehlt es LEER an Bedeutung? LEER erfüllt sowohl 1 als auch 2 in Ihrer Liste. Die erfahrenen Entwickler unterschätzen stark das Potenzial für Junior-Entwickler, etwas so Einfaches wie die Verwendung von “” durcheinander zu bringen.
– Andrew T. Finnell
27. Juli 2018 um 14:40 Uhr
@AndrewTFinnell den Namen EMPTY
hat keine Bedeutung, die der leere String selbst nicht bereits hat. Vor allem dokumentiert es nicht warum Sie haben sich entschieden, in diesem speziellen Fall eine leere Zeichenfolge zu verwenden. Es unterscheidet sich nicht von der Benennung einer Konstante ONE
und so zu tun, als ob es einen Sinn hätte, diese Konstante anstelle des Werts zu verwenden.
– Holger
11. September 2018 um 13:09 Uhr
Stimmen Sie ab, nur weil, nein, ich denke eigentlich nicht, dass “” klar genug ist 🙁 Ist es leer? Ist es leer? Gibt es dort ein Leerzeichen, das ich nicht sehen kann, weil meine Schriftgröße klein ist? War es beabsichtigt leer sein Gibt es seltsame “unsichtbare” Zeichen?
– Dan Rayson
11. September 2018 um 16:13 Uhr
Christoph Klewes
ich benutze StringUtils.EMPTY
um das Wörtliche zu verbergen und das auch auszudrücken return StringUtils.EMPTY
wurde vollständig erwartet und es sollte ein leerer String zurückgegeben werden, ""
kann zu der Vermutung führen, dass ""
leicht in etwas anderes geändert werden kann und dass dies vielleicht nur ein Fehler war. Ich denke, die EMPTY
ist ausdrucksstärker.
Wie andere vorgeschlagen haben: Verwenden Sie auch NULL für 0 und EINS für 1?
– Jon Skeet
4. November 2010 um 10:33 Uhr
Ich würde den speziellen „leeren“ Fall nicht mit der Verwendung des Integer-Literals vergleichen.
– Christoph Klewes
4. November 2010 um 12:30 Uhr
ich finde StringUtils.EMPTY
weniger ausdrucksstark als ""
.
– Bakar
26. September 2013 um 14:06 Uhr
@JonSkeet Viel Respekt an dich. Ich habe das Gefühl, dass Sie hier falsch sind. Während Sie und ich vielleicht nie darauf stoßen werden, gibt es einen Grund dafür, das wörtliche “” nicht zu verwenden, da es keine Syntaxprüfung bietet, wenn ein Entwickler es vermasselt. Und ja, ich habe gesehen, wie Junior-Entwickler einfache Dinge wie “” durcheinander gebracht haben. Ich glaube nicht an die Idee, EMPTY jemals zu ändern, um etwas anderes als “” zu bedeuten. Ich mag die Idee von EMPTY nur wegen der Tatsache, dass der Compiler seine Bedeutung verstehen kann.
– Andrew T. Finnell
27. Juli 2018 um 14:39 Uhr
@AndrewTFinnell: “Falsch” ist ein seltsamer Begriff für etwas, das sicherlich subjektiv sein muss. Nein, ich erwarte nicht, dass EMPTY jemals die Bedeutung ändert, aber ich – wie Bacar – finde ""
ausdrucksstärker zu sein als zu verwenden StringUtils.EMPTY
, und was Sie gesagt haben, hat meine Meinung dazu nicht geändert. Ich kann fast glauben, dass Entwickler fälschlicherweise ein leeres String-Literal geschrieben haben sehr, sehr gelegentlich – aber ich nehme die Klarheit des Strings wörtlich über den einmaligen (und hoffentlich beim Testen leicht zu findenden) Fehler, persönlich.
– Jon Skeet
27. Juli 2018 um 18:05 Uhr
Nein, nur verwenden ""
.
Das wörtliche ""
ist kristallklar. Es gibt kein Missverständnis darüber, was gemeint war. Ich wüsste nicht, warum Sie dafür eine Klassenkonstante benötigen würden. Ich kann nur davon ausgehen, dass diese Konstante im gesamten Paket verwendet wird StringUtils
Anstatt von ""
. Das bedeutet jedoch nicht, dass Sie es verwenden sollten.
Wenn ein Stein auf dem Bürgersteig liegt, musst du ihn nicht werfen.
“Wenn ein Stein auf dem Bürgersteig liegt, musst du ihn nicht werfen.” Erzähl das mal meinem 6 jährigen Sohn.
– Rolle
28. September 2017 um 9:28 Uhr
Ich bin erstaunt, wie viele Leute gerne blind annehmen, dass “” tatsächlich eine leere Zeichenfolge ist und (aus Versehen?) keines der wunderbaren unsichtbaren Zeichen ohne Leerzeichen von Unicode enthält. Verwenden Sie aus Liebe zu allem Guten und Anständigen EMPTY, wann immer Sie können.
Matthias
Ich werde hier meine zwei Cent hinzufügen, weil ich niemanden sehe, der darüber spricht String
Praktikum und Klasseninitialisierung:
String
Literale in Java-Quellen werden interniert, wodurch irgendein ""
und StringUtils.EMPTY
das gleich ObjektStringUtils.EMPTY
kann initialisieren StringUtils
Klasse, wenn sie auf ihr statisches Mitglied zugreift EMPTY
nur wenn es nicht deklariert ist final
(Die JLS ist in diesem Punkt spezifisch). Jedoch, org.apache.commons.lang3.StringUtils.EMPTY
ist final, also wird die Klasse nicht initialisiert.Siehe eine verwandte Antwort zum Internieren von Zeichenfolgen und zur Klasseninitialisierung unter Bezugnahme auf die JLS 12.4.1.
„nur wenn es nicht als final deklariert ist“, also da dieses Feld als final deklariert ist, kann darauf zugegriffen werden nicht verursachen die Initialisierung der StringUtils
Klasse.
– Holger
6. November 2019 um 10:28 Uhr
@Holger, das war eine allgemeine Aussage, aber tatsächlich habe ich mit einem Link zum Javadoc bearbeitet, der zeigt, dass es endgültig ist (und daher die Klasse nicht initialisiert).
– Matthias
6. November 2019 um 13:34 Uhr
Syntagma
Ich benutze es nicht wirklich gerne, da return "";
ist kürzer als return StringUtils.EMPTY
.
Allerdings eins FALSCH Vorteil der Verwendung ist, dass, wenn Sie tippen return " ";
Anstatt von return "";
können Sie auf ein anderes Verhalten stoßen (in Bezug darauf, ob Sie einen leeren String korrekt testen oder nicht).
„nur wenn es nicht als final deklariert ist“, also da dieses Feld als final deklariert ist, kann darauf zugegriffen werden nicht verursachen die Initialisierung der StringUtils
Klasse.
– Holger
6. November 2019 um 10:28 Uhr
@Holger, das war eine allgemeine Aussage, aber tatsächlich habe ich mit einem Link zum Javadoc bearbeitet, der zeigt, dass es endgültig ist (und daher die Klasse nicht initialisiert).
– Matthias
6. November 2019 um 13:34 Uhr
Cherouvim
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 das ist richtig, aber das bedeutet nicht, dass Sie sie auch verwenden sollten.
Ich meinte, es ist akzeptabel, da der Autor diesen Weg gewählt hat (vermeiden Sie die Verwendung von “magischen Werten”). Es sollte jedoch privat sein.
– Cherouvim
4. November 2010 um 10:15 Uhr
Der Autor verwendet 0 häufig im Code. Wäre es für sie besser gewesen, auch eine Konstante int ZERO = 0 zu definieren? Wenn nicht, was ist der Unterschied?
– Jon Skeet
4. November 2010 um 10:18 Uhr
Es kommt auf den Kontext an. Wenn dies ein FCKEditorStringUtils wäre, wäre ihr EMPTY “
 
” und ich würde lieber sehen, dass EMPTY wiederverwendet wird, anstatt diesen magischen Wert überall in der Klasse zu replizieren. Mit EMPTY meinen sie also wahrscheinlich EMPTY_CONTENT und nicht EMPTY_STRING (also ist Ihr NULL-Beispiel etwas unfair). Würden Sie nicht eine Konstante ERROR_VISA_INVALID=0 wiederverwenden?
– Cherouvim
4. November 2010 um 12:45 Uhr