Java tasarımcıları neden java.lang.String
sınıfta dize düzenleme yöntemlerinin statik sürümlerini oluşturmadı ? Aşağıdaki yöntemler, bahsettiğim şeydir, ancak soru sınıftaki diğer statik olmayan yöntemlere de genişletilebilir.
concat(String) substring(int, int)
replace(char, char) toLowerCase()
replace(CharSequence, CharSequence) toLowerCase(Locale)
replaceAll(String, String) toString()
replaceFirst(String, String) toUpperCase()
split(String) toUpperCase(Locale)
split(String, int) trim()
substring(int)
Bu yöntemlerin yalnızca statik olmayan sürümlerine sahip olmak, böyle bir yöntemin çağrılması gereken her yerde açık sıfır denetimini zorlar . Örneğin, sadece çağırmak eğer NullPointerExceptionexample = example.trim()
yol açar . Bu yüzden programcı aşağıdaki boyler plakası null kontrolünü yapmak zorundadır:String example = null
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
İlk argüman olarak giriş dizesini alacaktı String
bu yöntemlerin (belki de sadece ) statik sürümleri olsaydı çok daha uygun olurdu düşünürdüm:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Bu, programcılar tarafından yazılan ve programcıları açıkça boş durumlarla başa çıkmaya zorlamak yerine, yalnızca boş durumlarla otomatik olarak boş durumlarla ilgilenecek olan temiz kodlara yol açacaktır. Null dönen bir manipüle beri bana mantıklı boş bir yol açmalıdır dize boş dize değil, bir hata.
Java tasarımcıları String
sınıfı Java 1 veya Java 2'de tasarladıklarında neden böyle düşünmediler, hatta daha sonraki bir Java sürümüne böyle bir işlevsellik eklediler?
null
istisnai bir durumdur ve açıkça ele alınmalıdır.
Maybe<T>
tür yeniden uygulama.
string name = employee?.personalData?.name
. Tüm bu tekrarlayanlar için bir kısayol gibi if (employee != null)
. İlgili SO sorusu: stackoverflow.com/questions/1196031/…