Bu sitede başka bir cevap için kod yazarken şu tuhaflıkla karşılaştı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, sneakyThrow
aramanın neden derleyici için uygun olduğu konusunda oldukça kafam karıştı . T
Denetlenmemiş bir istisna türünden hiçbir yerde bahsedilmediği zaman, hangi olası tür için sonuç çıkardı ?
İkincisi, bunun işe yaradığını kabul ederek, derleyici neden nonSneakyThrow
aramadan şikayet ediyor ? Birbirlerine çok benziyorlar.
sneakyThrow
Aramayı kastetmelisiniz .throws T
Formların çıkarılmasıyla ilgili özel düzenlemeler Java 7 şartnamesinde mevcut değildi.