Kotlin में इस उदाहरण कोड देखें निम्नलिखित कोडक्यों डिफ़ॉल्ट पैरामीटर के साथ Kotlin समारोह अप्रयुक्त पैरामीटर के साथ एक विधि बनाता
public static final void foo(int bar, int baz) {
}
// $FF: synthetic method
// $FF: bridge method
public static void foo$default(int var0, int var1, int var2, Object var3) {
if ((var2 & 1) != 0) {
var0 = 0;
}
foo(var0, var1);
}
मैंने देखा है कि जिसके परिणामस्वरूप जावा विधि एक अप्रयुक्त Object var3
पैरामीटर है मिला है।
मैं एक तरह से सोचा था कि यह एक कक्षा में कार्यों से संबंधित हो सकता है, लेकिन जब decompiling इस कोड
class Foo {
fun foo(bar: Int = 0, baz: Int) {
/* ... */
}
}
मैं इस कोड
public final class Foo {
public final void foo(int bar, int baz) {
}
// $FF: synthetic method
// $FF: bridge method
public static void foo$default(Foo var0, int var1, int var2, int var3, Object var4) {
if ((var3 & 1) != 0) {
var1 = 0;
}
var0.foo(var1, var2);
}
}
मिला आप देख सकते हैं Object
मानदंड अभी भी है अप्रयुक्त और बस वहाँ बैठता है। अतिरिक्त परीक्षणों पर मैंने विस्तार विधियों के लिए एक ही व्यवहार देखा। एक ही चला जाता है जब डिफ़ॉल्ट पैरामीटर पिछले (यानी fun foo(bar: Int, baz: Int = 0) {}
)
मैं भी क्या है कि मूल्य जब कि समारोह बुला नीचे
fun main(args: Array<String>) {
foo(baz = 2)
}
और
कोड का उपयोग करने के लिए सेट है की जाँच करने के लिए एक बुनियादी परीक्षण किया है हैclass Something {
init {
foo(baz = 2)
}
}
decompiling के बाद यह मैं निम्नलिखित कोड मिल गया
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
foo$default(0, 2, 1, (Object)null);
}
और
public final class Something {
public Something() {
FooKt.foo$default(0, 2, 1, (Object)null);
}
}
जो भी कम समझ में आता है।
मेरा प्रश्न है: कोटलिन डिफ़ॉल्ट पैरामीटर के साथ फ़ंक्शंस के लिए एक अप्रयुक्त पैरामीटर क्यों उत्पन्न करता है? क्या यह एक बग है?
क्या आप जब अपने डिफ़ॉल्ट पैरामीटर पिछले रहे हैं मिलता है? जैसा कि 'मजेदार foo (बार: Int, baz: int = 0) {} ' – Les
@Les बस चेक किया गया है। यह वही है (यानी कि अजीब ऑब्जेक्ट var उत्पन्न होता है) – Mibac
क्या आपने कॉल करने का प्रयास किया है, और जावा कोड में ऑब्जेक्ट पास किया गया है? – DPM