SORU
2 EKİM 2012, Salı


'in ne kullan İllegalStateException?amaçlanan

Bu meslektaşım bugün bir tartışma çıktı.

Java için Javadocs IllegalStateException Bu devlet:

Bir yöntem bu sinyalleri yasadışı ya da uygunsuz bir zamanda çağırıldı. Diğer bir deyişle, Java ortamı ya da Java uygulaması istenen işlem için uygun bir durumda değil.

Ve Java diyor Etkili (Madde 60, sayfa 248):

Sık tekrar başka bir özel durum İllegalStateException. Bu genellikle çağırma alıcı nesnenin durumu nedeniyle geçersiz ise atmak dışında. Örneğin, eğer arayanın düzgün başlatıldı olmuştu önce bir nesneyi kullanma girişimi eğer atmak için bir istisna.

Burada bir tutarsızlık var gibi görünüyor. İkinci cümlenin javadocs yapar gibi görünüyor istisna olabilir açıklamak çok geniş durumu hakkında Java yürütme durumu, ama bu açıklama Etkili Java yapar ses gibi kullanılan koşulları ile ilgili özellikle devletin devletin nesnesi olan yöntemi çağrıldıktan.

Kullanımları gördüm içinde olduğunu GÖRDÜM (örneğin, koleksiyonlar, Matcher) ve Guava kesinlikle gibi düşmek için kategori Etkili Java bahsediyor ("Bu nesne bir devlet nerede bu yöntem olamaz"). Bu da IllegalStateExceptionile tutarlı'IllegalArgumentException s kardeş.

Eğer alakalı olduğunu GÖRDÜM IllegalStateException herhangi bir meşru kullanımları "" veya "Java uygulaması"? Java ortamı vardır Ya da kılavuz savunucusu bile en iyi uygulamalar daha geniş yürütme durumu için kullanıyor? Oluyor neden javadocs bu şekilde yazıldığından değil mi? ;)

CEVAP
2 EKİM 2012, Salı


Burada olduğunu GÖRDÜM bu durum özellikle meşru bir kullanımı (bkz: 300 diğer kullanımlar arasında URLConnection.setIfModifiedSince(long):

public void setIfModifiedSince(long ifmodifiedsince) {
    if (connected)
        throw new IllegalStateException("Already connected");
    ifModifiedSince = ifmodifiedsince;
}

Örnek oldukça açık olduğunu düşünüyorum. Eğer nesnenin belirli durumda ise ("Zaten bağlıoperasyon denilen olmamalıdır."), Bağlantı kuruldu, bu durumda, bazı özellikleri ayarlanamaz.

Bu durum sınıfın bazı devlet (state machine?) sahip olduğunda özellikle yararlıdır bu zaman içinde bazı yöntemler alakasız ya da imkansız hale getiriyor. start(), stop() 11* *yöntemleri Car yaklaşık bir sınıf düşünün. İki kez start() arama sırasında, birbiri ardına, muhtemelen yanlış bir şey yok, ama başladı bir araba yakıt kesinlikle kötü bir fikir. Yani araba ters bir durumda.

Belki iyi API bizi böyle sorunlar çalışma zamanında derleme zamanında değil, keşfedilen bu yanlış durumu çok yöntem çağırmak için izin vermemelidir. Bu belirli bir örnek, bir URL bağlantısı dönmelidir bağladıktan sonra geçerli olan tüm yöntemler bir alt kümesi ile farklı bir nesne.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CruzerLite

    CruzerLite

    1 EKİM 2011
  • itfigueres

    itfigueres

    12 EKİM 2013
  • trickycharms

    trickycharms

    6 Aralık 2013