Можно ли написать байтовый код для метода, который должен генерировать проверенное исключение?
Например, следующий Класс Java не t компилировать, если только метод не объявляет, что генерирует проверенное исключение:
public class CheckedExceptionJava {
public Class<?> testChecked(String s) throws ClassNotFoundException {
return Class.forName(s);
}
}
В то время как следующий эквивалент Scala делает (потому что Scala не имеет проверенных исключений):
class CheckedException {
def testChecked( s : String ) = Class.forName( s )
}
Даже если сгенерированные байт-коды почти идентичны:
Compiled from "CheckedExceptionJava.java"
public class CheckedExceptionJava extends java.lang.Object{
public CheckedExceptionJava();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public java.lang.Class testChecked(java.lang.String) throws java.lang.ClassNotFoundException;
Code:
0: aload_1
1: invokestatic #2; //Method java/lang/Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
4: areturn
}
Compiled from "CheckedException.scala"
public class CheckedException extends java.lang.Object implements scala.ScalaObject{
public CheckedException();
Code:
0: aload_0
1: invokespecial #24; //Method java/lang/Object."<init>":()V
4: return
public java.lang.Class testChecked(java.lang.String);
Code:
0: aload_1
1: invokestatic #11; //Method java/lang/Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
4: areturn
}
Вопрос: Является ли возможно ли (и как) сгенерировать байт-код, который не отмечает, что он генерирует проверенное исключение, даже если код внутри этого метода не обрабатывает его?