Oldukça aptalca bir soru. Kod verildiğinde:
public static int sum(String a, String b) /* throws? WHAT? */ {
int x = Integer.parseInt(a); // throws NumberFormatException
int y = Integer.parseInt(b); // throws NumberFormatException
return x + y;
}
Java'nın iyi olup olmadığını söyleyebilir misin? Bahsettiğim şey, NumberFormatException
kontrol edilmeyen bir istisnadır. Sen yok bir parçası olarak belirtmek için sum()
imza. Dahası, anladığım kadarıyla, kontrol edilmeyen istisnalar fikri sadece programın uygulamasının yanlış olduğunu işaret etmektir ve daha da önemlisi, kontrol edilmeyen istisnaları yakalamak kötü bir fikirdir, çünkü bu , çalışma zamanında kötü programı düzeltmek gibidir .
Biri lütfen açıklığa kavuşturur mu:
NumberFormatException
Metodun imzasının bir parçası olarak belirtmeliyim .- Kendi kontrol edilen istisnamı (
BadDataException
) tanımlamalıNumberFormatException
, yöntemin içinde işlem yapmalı ve olarak yeniden atmalıyımBadDataException
. - Kendi kontrol edilen istisnamı (
BadDataException
) tanımlamalı , her iki dizeyi de normal ifadeler gibi doğrulamalı veBadDataException
eşleşmiyorsa atmalıyım. - Senin fikrin?
Güncelleme :
Bir nedenden dolayı kullanmanız gereken açık kaynaklı bir çerçeve olmadığını hayal edin. Yöntemin imzasına bakarsınız ve "Tamam, asla atmaz" diye düşünürsünüz. Sonra bir gün bir istisna olur. Bu normal mi?
Güncelleme 2 :
Benim sum(String, String)
kötü bir tasarım olduğunu söyleyen yorumlar var . Kesinlikle katılıyorum, ancak iyi bir tasarıma sahip olsaydık orijinal sorunun asla ortaya çıkmayacağına inananlar için, işte ekstra bir soru:
Problem tanımı şu şekildedir: sayıların String
s olarak saklandığı bir veri kaynağınız var . Bu kaynak XML dosyası, web sayfası, 2 düzenleme kutusu olan masaüstü penceresi olabilir.
Amacınız bu 2 String
s'yi alan mantığı uygulamak, onları int
s'ye çevirmek ve "toplam xxx" yazan mesaj kutusu göstermektir.
Bunu tasarlamak / uygulamak için kullandığınız yaklaşım ne olursa olsun , bu 2 iç işlevselliğe sahip olacaksınız :
- Dönüştürmek için bir yer
String
içinint
- 2
int
saniye eklediğiniz bir yer
Orijinal gönderimin ana sorusu şudur:
Integer.parseInt()
doğru dizenin geçirilmesini bekler . Ne zaman kötü bir dizge geçerseniz , bu , programınızın yanlış olduğu anlamına gelir (" kullanıcınız bir aptal" değil). Bir yandan ZORUNLU semantiğe sahip Integer.parseInt () 'e sahip olduğunuz yerde kod parçasını uygulamanız gerekir ve diğer yandan girdinin yanlış olduğu durumlarda tamam olmanız gerekir - SHOULD anlambilim .
Öyleyse, kısaca: Yalnızca ZORUNLU kütüphanelerim varsa, anlambilimini nasıl uygulayabilirim ?