Dönüş boş; Bir istisna yakalanabileceğinden gereklidir, ancak böyle bir durumda, bunun boş olup olmadığını zaten kontrol ettiğimizden (ve klonlamayı desteklediğimizi çağırdığımız sınıfı bildiğimizi varsayalım), bu nedenle try ifadesinin asla başarısız olmayacağını biliyoruz.
İfadenin tryasla başarısız olamayacağını bildiğiniz bir şekilde ilgili girdilerle ilgili ayrıntıları biliyorsanız, buna sahip olmanın anlamı nedir? tryİşlerin her zaman başarılı olacağından eminseniz , kaçının (kod tabanınızın tüm ömrü boyunca kesinlikle emin olabileceğiniz nadirdir).
Her durumda, derleyici maalesef bir akıl okuyucusu değildir. İşlevi ve girdilerini görür ve sahip olduğu bilgiler verildiğinde return, alt kısımdaki ifadeye sizinkine ihtiyaç duyar .
Yalnızca sözdizimini tatmin etmek ve derleme hatalarından kaçınmak için (buna ulaşılmayacağını açıklayan bir yorumla) ekstra return ifadesini sonuna koymak kötü bir uygulama mıdır, yoksa böyle bir şeyi kodlamanın daha iyi bir yolu var mı? return ifadesi gereksiz mi?
Tam tersine, başka bir kod satırına mal olsa bile herhangi bir derleyici uyarısından kaçınmanın iyi bir uygulama olduğunu öneririm. Buradaki satır sayısı hakkında fazla endişelenmeyin. Fonksiyonun güvenilirliğini test ederek oluşturun ve ardından devam edin. Sadece returnifadeyi atlayabileceğinizi varsayarak , bir yıl sonra o koda geri döndüğünüzü hayal edin ve ardından returnalttaki bu ifadenin, yapabileceğiniz varsayımlar nedeniyle neden atlandığına dair küçük ayrıntıların ayrıntılarını açıklayan bazı yorumlardan daha fazla kafa karışıklığına neden olup olmayacağına karar vermeye çalışın. girdi parametreleri hakkında bilgi verin. Büyük olasılıkla returnifadenin üstesinden gelmek daha kolay olacak.
Bununla birlikte, özellikle bu bölüm hakkında:
try {
return a.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
...
return null;
Buradaki istisnaları ele alma zihniyetinde biraz tuhaf olduğunu düşünüyorum. Genelde, yanıt olarak yapabileceğiniz anlamlı bir şeyin olduğu bir sitede istisnaları yutmak istersiniz.
try/catchBir işlem mekanizması olarak düşünebilirsiniz . trybu değişiklikleri yapmak, başarısız olurlarsa ve catchbloğa dallanırsak catch, geri alma ve kurtarma sürecinin bir parçası olarak yanıt olarak bunu ( blokta ne varsa ) yapın.
Bu durumda, yalnızca bir yığın izleme yazdırmak ve ardından boş döndürmeye zorlanmak tam olarak bir işlem / kurtarma zihniyeti değildir. Kod, hata işleme sorumluluğunu getClonehataları manuel olarak kontrol etmek için çağıran tüm koda aktarır . Yakalamayı tercih edebilirsinizCloneNotSupportedException ve başka, daha anlamlı bir istisna biçimine çevirmeyi ve atmayı tercih edebilirsiniz, ancak istisnayı basitçe yutmak ve bu durumda bir işlem kurtarma sitesi gibi olmadığından bir boş döndürmek istemezsiniz.
Bir istisna atmak bundan kaçınırken, başarısızlıkla bu şekilde manuel olarak kontrol etme ve başa çıkma sorumluluklarını arayanlara sızdırırsınız.
Sanki bir dosya yüklerseniz, bu üst düzey işlemdir. try/catchOrada olabilir . tryingDosya yükleme işlemi sırasında nesneleri klonlayabilirsiniz. Bu üst düzey işlemin herhangi bir yerinde bir hata varsa (dosyayı yüklerken), genellikle bu üst düzey işlem try/catchbloğuna tüm yol boyunca istisnalar atmak istersiniz, böylece bir dosyanın yüklenmesindeki bir başarısızlıktan (ister klonlamadaki bir hata veya başka bir şey nedeniyle). Bu nedenle, genellikle bunun gibi granüler bir yerde bir istisnayı yutup sonra bir boş döndürmek istemeyiz, örneğin bu istisnaların birçok değerini ve amacını ortadan kaldırır. Bunun yerine, istisnaları, onunla anlamlı bir şekilde başa çıkabileceğimiz bir siteye kadar yaymak istiyoruz.
Objectparametre alır . Eğeradestekleyen bir sınıf değildircloneyöntemi (veya bu tanımlanırObject?) Veya bir hata sırasında oluşursacloneyöntemiyle (veya şu anda düşünemiyorum başka bir hata), bir özel durum olabilir ve siz ulaşacak dönüş ifadesi.