2010-03-25 18 views
47

Ben boş dönen yerine istisna istiyorum bu yöntemiÖnemli bir parametre/bağımlılık eksik olduğunda atılacak istisna nedir?

/** 
* @return List of group IDs the person belongs to 
* 
*/ 
public List<String> getGroups() { 
    if (this.getId().equals("")) return null; 
} 

, önemli bir parametre/bağımlılık ayarlanmamış zaman atmak için istisna nedir atın?

+6

Bu kod, getID() 'null değerini döndürürse bir NPE değerini yükseltecektir. 'If ("" .equals (this.getId())) ... ' –

+0

' nun bir soyut sınıfta tanımladığım ve içeride bir yakalama olduğunu ve hata durumunda boş dizeyi döndüreceğimi daha iyi olurdu. – Pentium10

cevap

71

Parametre/argüman dıştan denetleniyorsa IllegalArgumentException veya yöntem yanlış bir an (durum) çağrıldığında IllegalStateException kullanırdım. Özel durumunuzda, bunun ikincisi olduğunu düşünüyorum. Bir (şüpheli) alternatif NullPointerException.

Bu

ancak açıkça kullanıcı sebebini anlar böylece @throws belgelendirilmesi gerekmektedir.

+0

Sorunun içeriği gerçekten sınırlıdır. Görebildiğim kadarıyla İMKB en iyi seçimdir. Ben de açıkça belirttim, bu yüzden nasıl kötü olduğunu görmüyorum :) – BalusC

+0

Bir sihirli var mı? Otomatik olarak eksik @ paramları yeniden oluşturmak ve @throws bölümüne eklemek için Eclipse'deki yorum bölümünü nasıl güncelleyebilirim? Belki bir kısayol? – Pentium10

+0

Üzgünüz, bunu bilmiyorum. Çalışma dışı istisnalar için otomatik olarak eklenecektir ("throws" cümlesi oluşturduğunuzda/güncellediğinizde), ancak çalışma zamanı istisnaları için geçerli değildir. – BalusC

2

Kimlik, sahibinin durumu nedeniyle bir IllegalStateException kullanır. Eğer id parametre olarak geçerse, bir IllegalArgumentException doğru olurdu.

0

İstisnayı genişleterek kendi Özel Durumum türümü oluşturabilirim. Bu şekilde çağrı işlevleri, bu Özel Durum'u yakalayabilir ve uygun şekilde zarif bir şekilde ele alabilir. Not: Aynı şeyi, Özel Durumu Genişleten herhangi bir şeyle de yapabilirsiniz, ancak kendi İstisna sınıflarımı oluşturmayı tercih ediyorum, böylece istisna işlemimde çok güçlü olabilirim. Tabii ki, bu size kalmış.

+0

Tekerleği neden yeniden icat edin? IllegalArgumentException tam olarak yasa dışı bir argüman için yapılır. –

+0

Yakalamak istediğiniz kaç farklı yasadışı bağımsız değişken türüne bağlıdır. Excpetion'u genişletmeyi veya bu durumda IllegalArgumentException ile uğraşmak istediğim farklı koşullarla başa çıkmak için özel bir İstisna sınıfına sahip olmayı seviyorum. İstisna işlemeyi daha kolay ve daha sağlam yapar, IMHO. -Jay – Jay

2

Eğer kimliğin her zaman ayarlanmış olması mümkün değilse (örneğin, geçerli bir kimliğin geçip geçmediğini kontrol edebilmek için kurucunun içinde olması gerektiğinden), IllegalStateException atmak için diğer önerilerin doğru olduğunu düşünüyorum. Ama denemek ve nesne eğer mümkünse

1

Yerine istisna atma, sadece boş bir liste dönmelidir ilk etapta bu duruma alınamıyor sağlamak için daha iyi olurdu. Bir bağımlılık/parametre karşılanmadıysa, sonuç yoktur. Yayınlanan yorumlar ve kodlardan beklenen davranış bu gibi görünüyor. Kimlik boşsa, grup eklenmez, boş bir liste vardır.