यदि किसी ऐसे विधि के लिए बाइट कोड लिखना संभव है जो चेक अपवाद को फेंकने वाला है?स्कैला जेनरेट कोड बाइट कोड कैसे अपवाद को छोड़ देता है?
उदाहरण के लिए निम्नलिखित जावा वर्ग संकलन नहीं है जब तक कि विधि वाणी यह जाँच अपवाद फेंकता है:
public class CheckedExceptionJava {
public Class<?> testChecked(String s) throws ClassNotFoundException {
return Class.forName(s);
}
}
जबकि निम्नलिखित स्काला बराबर करता है (क्योंकि स्काला अपवाद जाँच की है नहीं करता है):
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
}
प्रश्न: क्या यह संभव है (और कैसे) बाइटकोड उत्पन्न करने के लिए यह चिह्नित नहीं करता है कि यह एक चेक अपवाद फेंकता है भले ही उस विधि के अंदर कोड इसे संभाल नहीं लेता है?
ओह, मैं देखता हूं। शायद जवासिस्ट जैसे उपकरण के साथ? :) http://bit.ly/gNzXfA – OscarRyz