S'il est possible d'écrire du code octet pour une méthode censée déclencher une exception vérifiée?Comment le code octet généré par scala supprime-t-il l'exception vérifiée?
Par exemple, la classe Java suivante ne compile pas moins que la méthode déclare lève l'exception vérifié:
public class CheckedExceptionJava {
public Class<?> testChecked(String s) throws ClassNotFoundException {
return Class.forName(s);
}
}
Alors que l'équivalent Scala qui suit fait (parce que Scala ne dispose pas d'exceptions vérifiées):
class CheckedException {
def testChecked(s : String) = Class.forName(s)
}
Même si le bytecode généré sont presque identiques:
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
}
Question: Est-il possible (et comment) de générer un bytecode car celui-ci ne marque pas qu'il lève une exception vérifiée même si le code à l'intérieur de cette méthode ne le gère pas?
Ohhh je vois. Probablement avec un outil comme javassiste? :) http://bit.ly/gNzXfA – OscarRyz