SORU
9 Temmuz 2015, PERŞEMBE


Özel durum türü kendine özgü bir özelliği Java 8'de çıkarım

Bu sitede başka bir cevap için kod yazarken bu özelliği: rastladım

static void testSneaky() {
  final Exception e = new Exception();
  sneakyThrow(e);    //no problems here
  nonSneakyThrow(e); //ERRROR: Unhandled exception: java.lang.Exception
}

@SuppressWarnings("unchecked")
static <T extends Throwable> void sneakyThrow(Throwable t) throws T {
  throw (T) t;
}

static <T extends Throwable> void nonSneakyThrow(T t) throws T {
  throw t;
}

İlk olarak, oldukça sneakyThrow çağrı derleyici için OK neden karıştı. Olası tür kontrolsüz bir özel durum türü söz hiçbir yerde yok T anlaması için ne yaptı?

İkincisi, bu işleri kabul ederken, neden sonra derleyici nonSneakyThrow çağrı üzerine şikayet ediyor? Birbirine çok benzer görünüyor.

CEVAP
9 Temmuz 2015, PERŞEMBE


sneakyThrow T RuntimeException olarak algılanır. Bu tür kesmesi dil spec (http://docs.oracle.com/javase/specs/jls/se8/html/jls-18.html) dan takip edilebilir

Öncelikle, bölüm 18.1.3 bir not var:

Çözünürlük ± örnekleme optimize yönlendirir bu yüzden, mümkünse, kontrol durum türü değildir. bir bağlı formda throws α tamamen bilgilendirme:

Bu hiçbir şeyi etkilemez, ama bu özel bir durum ile sonuçlandı istisna türleri hakkında daha fazla bilgi sahip Çözüm bölümüne (18.4), bize işaret ediyor

... Aksi takdirde, eğer bağlı içerir throws αi ve uygun üst sınır aı, en fazla, Exception, Throwable Object, Ti = RuntimeException.

Bu durumda sneakyThrow - sadece üst sınır T derler RuntimeException spec göre, olayla yani Throwable, için geçerlidir. Bu yöntem vücut önemsİzdİr - işaretli dökme aslında, derleme zamanı kontrol dışı durum sistemi baş edemeyeceği bir yöntem bırakmak olmaz çünkü zamanında başarılı olur.

nonSneakyThrow derleme değil gibi bu yöntemin T var bir alt sınır Exception (yani T bir supertype Exception Exception kendisi) olarak işaretli özel durum nedeniyle türü yok olmak denir, böylece T alır anlaşılmaktadır Exception.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • kylelandry

    kylelandry

    9 AĞUSTOS 2007
  • VJ VIMANA

    VJ VIMANA

    3 Mayıs 2007

İLGİLİ SORU / CEVAPLAR