Czy używasz StringUtils.EMPTY
zamiast ""
?
Mam na myśli albo jako wartość zwracaną, albo jeśli ustawisz wartość zmiennej String. Nie mam na myśli porównania, bo tam używamyStringUtils.isEmpty()
java
string
apache-commons
keuleJ
źródło
źródło
StringUtils.EMPTY
. Wyjaśnia, że zamierzone jest użycie pustego Ciągu, a nie jakiegoś rodzaju lenistwa („Och, to wymaga String, przejdźmy""
”). Jeśli ktoś trafi w ten fragment kodu, dwa razy się zastanowi, zanim wprowadzi zmiany. Ponadto, jeśli zostałabyStringUtils.EMPTY
zdefiniowana jako własna zmienna, na przykładMyClass.EMPTY
wprowadzenie zmian w „tej reprezentacji pustki” wymagałoby zmiany jednej linii kodu. Możesz na przykład zmienić go na"<empty>"
zamiast pustego ciągu""
. Ale myślę, że to trochę za daleko.EMPTY
nie ma żadnego znaczenia, którego sam pusty ciąg nie ma. Przede wszystkim nie dokumentuje, dlaczego zdecydowałeś się użyć pustego ciągu w tym konkretnym przypadku. Nie różni się to od nazywania stałejONE
i udawania, że warto było używać tej stałej zamiast wartości.Używam
StringUtils.EMPTY
, aby ukryć dosłowne, a także wyrazić, żereturn StringUtils.EMPTY
było w pełni oczekiwane i powinien zwrócić pusty ciąg,""
może prowadzić do założenia, że""
można go łatwo zmienić na coś innego i że to może być tylko błąd. Myślę, żeEMPTY
jest bardziej wyrazisty.źródło
StringUtils.EMPTY
mniej wyrazisty niż""
.""
że jest bardziej wyrazisty niż używanieStringUtils.EMPTY
, a to, co powiedziałeś, nie zmieniło mojego zdania na ten temat. Mogę po prostu uwierzyć, że programiści bardzo, bardzo rzadko pisali niepoprawnie pusty ciąg znaków - ale mam nadzieję, że będę miał przejrzystość dosłownego ciągu na poziomie raz na milion (i łatwo go znaleźć w testach, mam nadzieję ... ) błąd osobiście.Nie, po prostu użyj
""
.Dosłowne
""
jest jasne jak kryształ. Nie ma nieporozumień, co miało na myśli. Nie wiedziałbym, dlaczego potrzebujesz do tego stałej klasy. Mogę tylko założyć, że ta stała jest używana w całym pakiecie zawierającymStringUtils
zamiast""
. Nie oznacza to jednak, że powinieneś go używać.Jeśli na chodniku jest kamień, nie musisz go rzucać.
źródło
Jestem zdumiony, ilu ludzi jest szczęśliwych, ślepo zakładając, że „” jest rzeczywiście pustym ciągiem i nie zawiera (przypadkowo?) Żadnego cudownego niewidocznego i niezawierającego odstępów znaków Unicode. Z miłości do wszystkiego, co dobre i przyzwoite, używaj PUSTY, kiedy tylko możesz.
źródło
Dodam tutaj moje dwa centy, ponieważ nie widzę nikogo mówiącego o
String
stażach i inicjalizacji zajęć:String
literały w źródłach Java są internowane, tworząc dowolny""
iStringUtils.EMPTY
ten sam obiektStringUtils.EMPTY
może zainicjowaćStringUtils
klasę, ponieważ uzyskuje dostęp do jej statycznego elementu członkowskiegoEMPTY
tylko wtedy, gdy nie jest zadeklarowanyfinal
(JLS jest specyficzny w tym punkcie). Jednak jest ostateczna, więc nie zainicjuje klasy.org.apache.commons.lang3.StringUtils.EMPTY
Zobacz powiązaną odpowiedź na temat internowania ciągów znaków i inicjalizacji klasy , odnosząc się do JLS 12.4.1 .
źródło
StringUtils
klasy.Nie lubię go używać, ponieważ
return "";
jest krótszy niżreturn StringUtils.EMPTY
.Jednak jedną fałszywą zaletą korzystania z niego jest to, że jeśli wpiszesz
return " ";
zamiastreturn "";
, możesz napotkać inne zachowanie (dotyczące tego, czy poprawnie przetestujesz pusty ciąg, czy nie).źródło
""
też, nienawidzę wpisywać tego samego literału więcej niż jeden raz, nawet raz tylko czasami. Wolałbym raczej deklarować stałe w Constants.java , ale nie powtarzać ich wszędzie w kodzie źródłowym.return "";
jest brzydki, ja PREFER użyć zwrotuStringUtil.EMPTY
(zadeklarowanego we własnej klasie StringUtil nie Apache StringUtils ).Jeśli twoja klasa nie korzysta z niczego innego ze źródeł wspólnych, szkoda byłoby mieć tę zależność tylko dla tej magicznej wartości.
Projektant StringUtils w dużym stopniu korzysta z tej stałej i jest to słuszne, ale to nie znaczy, że powinieneś również jej używać.
źródło
Szczerze mówiąc, nie widzę żadnego pożytku. Jeśli chcesz porównać np. Z pustym ciągiem, po prostu użyj
StringUtils.isNotEmpty(..)
źródło
StringUtils.isNotEmpty(..)
wykonuje również kontrolę null, więc nie jest dokładnie tym samym, co porównywanie z pustym ciągiem.null
? jako drugi argumentequals
, ale wynik będzie taki sam -false
isNotEmpty
jest przeciwieństwem"".equals(…)
, a więc fakt, że będzie traktowaćnull
jak pusty ciąg jest inna w porównaniu z pustym ciągiem,"".equals("")
→true
,"".equals(null)
→false
,StringUtils.isNotEmpty("")
→false
,StringUtils.isNotEmpty(null)
→false
. Jeśli chcesz tylko wiedzieć, czy ciąg jest pusty, użyjstring.isEmpty()
, który ma prawidłowe zachowanie zwracaniatrue
iff, jest to pusty ciąg i rzucania a,NullPointerException
jeśli ciąg jestnull
…StringUtils.EMPTY
W niektórych przypadkach uważam za przydatne dla czytelności. W szczególności z:Operator trójskładnikowy np.
item.getId() != null ? item.getId() : StringUtils.EMPTY;
Również przy użyciu stałej
StringUtils.EMPTY
tworzone jest odniesienie do . W przeciwnym razie, jeśli spróbujesz utworzyć wystąpienie literału String za""
każdym razem, gdy maszyna JVM będzie musiała sprawdzić, czy istnieje już w puli String (co prawdopodobnie będzie, więc nie ma dodatkowych kosztów związanych z tworzeniem instancji). Z pewnością użycieStringUtils.EMPTY
pozwala uniknąć konieczności sprawdzania puli String?źródło
StringUtils.EMPTY
stała jest rozwiązywana w czasie kompilacji.StringUtil.EMPTY
jest to stała czasu kompilacji, odniesienie do niej jest kompilowane do dokładnie tego samego kodu bajtowego, co przy użyciu""
bezpośrednio. Co więcej, nie rozumiem, dlaczego operator trójskładnikowy miałby mieć jakiekolwiek znaczenie. To wyraz jak każdy inny. Każdy powód, aby użyć lub nie używać nazwanej stałej, dotyczy również operatora trójskładnikowego.Nie, bo mam więcej do napisania. A pusty łańcuch jest pusty niezależnym od platformy (w Javie).
File.separator
jest lepsze niż „/” lub „\”.Ale rób, co chcesz. Nie możesz dostać takiej literówki
return " ";
źródło
someString.isEmpty()
zamiast tego.Tak, to ma sens. Może nie jest to jedyna droga, ale widzę bardzo niewiele w sposobie stwierdzenia, że „nie ma to sensu”.
W mojej opinii:
źródło
It will still require changing everywhere if you don't define your own variable and use it in multiple places.
zamierzasz zmienić pusty ciąg na inny pusty ciąg?