Bunun StringUtils.EMPTY
yerine kullanıyor musun ""
?
Yani ya bir dönüş değeri olarak ya da bir String değişkeninin değerini ayarlarsanız. Karşılaştırmayı kastetmiyorum çünkü orada kullanıyoruzStringUtils.isEmpty()
Yanıtlar:
Tabii ki değil. Gerçekten "" nin yeterince net olmadığını düşünüyor musun?
Sabitlerin esasen 3 kullanım durumu vardır:
Hiçbiri burada geçerli değildir.
EMPTY
, boş dizgenin zaten sahip olmadığı herhangi bir anlam taşımıyor. En önemlisi, o durumda neden boş bir dizge kullanmaya karar verdiğinizi belgelemiyor . Bir sabiti adlandırmak ONE
ve değer yerine bu sabiti kullanmanın bir anlamı varmış gibi davranmaktan farklı değildir .
StringUtils.EMPTY
Birebir olanı gizlemek için ve aynı zamanda return StringUtils.EMPTY
tamamen beklenen ve boş bir dizge dönmesi gerektiğini ifade etmek için kullanıyorum , kolayca başka bir şeye dönüştürülebilecek ve bunun belki de sadece bir hata olduğu ""
varsayımına yol açabilir ""
. Bence EMPTY
daha anlamlı.
StringUtils.EMPTY
az etkileyici buluyorum ""
.
""
kullanmaktan daha anlamlı buluyorum StringUtils.EMPTY
ve söyledikleriniz bu konuda fikrimi değiştirmedi. Geliştiricilerin çok, çok nadiren boş bir dizeyi yanlış yazdıklarına neredeyse inanabilirim - ancak dizenin netliğini milyonda bir üzerinden alacağım (ve testte kolayca bulunabilir, umarım ... ) hata, şahsen.
Hayır, sadece kullan ""
.
Gerçek ""
, kristal kadar net. Ne kastedildiği konusunda hiçbir yanlış anlama yok. Bunun için neden bir sınıf sabitine ihtiyacınız olduğunu bilmiyorum. Bu sabitin yalnızca içeren StringUtils
yerine içeren paket boyunca kullanıldığını varsayabilirim ""
. Bu, onu kullanmanız gerektiği anlamına gelmez.
Kaldırımda bir kaya varsa onu fırlatmana gerek yok.
Kaç kişinin "" gerçekten boş bir dizge olduğunu ve (kazara?) Unicode'un harika görünmez ve boşluk bırakmayan karakterlerini içermediğini körü körüne varsaymaktan mutlu olduğuna şaşırdım. İyi ve nezih olan her şeyin aşkı için, mümkün olduğunca BOŞ'u kullanın.
Buraya iki sentimi ekleyeceğim çünkü hiç kimsenin String
stajyerlik ve Sınıf başlatma hakkında konuştuğunu görmüyorum :
String
Java kaynaklarda sabitler, enterne yapıyoruz herhangi ""
ve aynı nesneyeStringUtils.EMPTY
StringUtils.EMPTY
olabilir başlatmak StringUtils
onun statik üyesi erişir olarak, sınıf EMPTY
o ilan edilmemesi durumundafinal
(JLS bu noktada özgüdür). Ancak, bir o sınıfı başlatılamıyor böylece, son.org.apache.commons.lang3.StringUtils.EMPTY
JLS 12.4.1'e atıfta bulunarak , String interning ve Sınıf başlatma ile ilgili ilgili cevaba bakınız .
StringUtils
sınıfına.
Daha return "";
kısa olduğu için kullanmayı gerçekten sevmiyorum return StringUtils.EMPTY
.
Ancak, bunu kullanmanın yanlış bir avantajı, return " ";
yerine return "";
yazarsanız, farklı davranışlarla karşılaşabilmenizdir (boş bir String'i doğru bir şekilde test edip etmediğinize ilişkin olarak).
""
bir kez bile sadece bazen, ben tek seferde birden aynı değişmez dize daha yazmaya nefret, ayrıca. Sabitleri Constants.java'da beyan etmeyi, ancak bunları her yerde kaynak kodda tekrar etmemeyi tercih ederim .
return "";
çirkin, ben TERCİH getiriyi kullanmak StringUtil.EMPTY
(kendi sınıfında ilan StringUtil DEĞİL Apache StringUtils ).
Sınıfınız müştereklerden başka bir şey kullanmıyorsa, sadece bu sihirli değer için bu bağımlılığa sahip olmak yazık olur.
StringUtils'in tasarımcısı bu sabiti yoğun bir şekilde kullanır ve yapılacak doğru şey bu, ancak bu sizin de kullanmanız gerektiği anlamına gelmez.
Dürüst olmak gerekirse, ikisinin de pek kullanımını görmüyorum. Boş bir dizeyle karşılaştırmak istiyorsanız, sadece şunu kullanın:StringUtils.isNotEmpty(..)
StringUtils.isNotEmpty(..)
Ayrıca boş bir dizge ile karşılaştırmakla tam olarak aynı olmayacak şekilde bir nullcheck yapar.
null
? 2. argüman olarak equals
, ancak sonuç aynı olacak -false
isNotEmpty
tersidir "".equals(…)
, bu nedenle, tedavi gerçeği null
boş dize gibi olan boş bir dize ile karşılaştırarak farklı "".equals("")
→ true
, "".equals(null)
→ false
, StringUtils.isNotEmpty("")
→ false
, StringUtils.isNotEmpty(null)
→ false
. Eğer bir dizgenin boş olup olmadığını bilmek istiyorsanız, boş bir dizge ise string.isEmpty()
döndürmek true
ve NullPointerException
eğer dizge ise a atmak için doğru davranışa sahip olan kullanın null
…
StringUtils.EMPTY
Okunabilirlik açısından bazı durumlarda faydalı buluyorum . Özellikle şunlar ile:
Üçlü operatör ör.
item.getId() != null ? item.getId() : StringUtils.EMPTY;
Ayrıca bir sabit kullanılarak bir referans StringUtils.EMPTY
oluşturulur. Aksi takdirde, Dize değişmezini ""
her seferinde başlatmaya çalışırsanız , JVM, Dize havuzunda zaten var olup olmadığını kontrol etmek zorunda kalacaktır (ki muhtemelen olacaktır, dolayısıyla fazladan örnek oluşturma ek yükü yoktur). Şüphesiz kullanmak StringUtils.EMPTY
, String havuzunu kontrol etme ihtiyacını ortadan kaldırır?
StringUtils.EMPTY
sabitin derleme zamanında çözüldüğünden bahsedilir .
StringUtil.EMPTY
bir derleme zaman sabitidir, buna bir referans kullanılarak tam olarak aynı bayt kodu derlenmiş ""
şirketinden. Dahası, üçlü operatörün neden herhangi bir fark yaratması gerektiğini anlamıyorum. Diğerleri gibi bir ifade. Adlandırılmış bir sabiti kullanmak veya kullanmamak için herhangi bir neden, üçlü operatör için de geçerlidir.
Hayır, çünkü yazacak daha çok şeyim var. Ve boş bir String plattform bağımsız boştur (Java'da).
File.separator
"/" veya "\" den daha iyidir.
Ama istediğin gibi yap. Gibi bir yazım hatası alamazsınızreturn " ";
someString.isEmpty()
onun yerine yazarlar .
Evet, mantıklı. Gidilecek tek yol bu olmayabilir ama bunun "mantıklı olmadığını" söylerken çok az şey görebiliyorum.
Bence:
It will still require changing everywhere if you don't define your own variable and use it in multiple places.
boş bir dizeyi farklı bir boş dizeye mi değiştireceksiniz?
StringUtils.EMPTY
. Boş String kullanımının amaçlandığını ve bir tür tembellik olmadığını açıkça ortaya koyuyor ("Oh, bu bir String gerektirir, hadi geçelim""
"). Birisi bu kod parçasına ulaşırsa, değişiklik yapmadan önce iki kez düşünecektir. Ayrıca,StringUtils.EMPTY
kendi değişkeniniz olarak tanımlanmışMyClass.EMPTY
olsaydınız , örneğin "boşluğun bu gösteriminde" değişiklik yapmak bir satır kodun değiştirilmesini gerektirirdi. Örneğin,"<empty>"
boş Dize yerine bunu değiştirebilirsiniz""
. Ama bence bu biraz fazla ileri gidiyor.