가능하면 사용하지 말 것.
public class ExceptionThrower { private ExceptionThrower() {} public static void spit(final Throwable throwable) { // 아래 <RuntimeException> 타입 정보는 컴파일 상태에서는 지워진다. ExceptionThrower.<RuntimeException>throwWithoutCheck(throwable); } @SuppressWarnings("unchecked") private static <T extends Throwable> void throwWithoutCheck(Throwable throwable) throws T { // 아래 Type Casting 정보는 Java Generic의 특성상 컴파일시 정보가 사라지므로 // 실제 캐스팅은 발생하지 않는다. throw (T) throwable; } } ExceptionThrower.spit(new IOException("테스트 Checked 예외"));