2017-08-07 63 views
0

调用函数我有这样的代码:科特林:我怎样才能从对象表达

// foo.kt 
fun bar() { 
    val foo = object { 
     fun zzz() { 
      println() 
     } 
    } 

    foo.zzz() 
} 

而且我用kotlinc foo.kt编译科特林代码。我得到了'FooKt.class'和'FooKt $ bar $ foo $ 1.class'。 然后我反编译“FooKt.class”文件发现Java代码,它是这样的(由JD-GUI):

import java.io.PrintStream; 
import kotlin.Metadata; 

@Metadata(mv={1, 1, 6}, bv={1, 0, 1}, k=2, d1={"\000\006\n\000\n\002\020\002\032\006\020\000\032\0020\001"}, d2={"bar", ""}) 
public final class MainKt 
{ 
    public static final void bar() 
    { 
    Object foo = new Object() 
    { 
     public final void zzz() 
     { 
     System.out.println(); 
     } 
    }; 
    foo.zzz();  // You can NOT do this in java world. But kotlin can do. Why? 
    } 
} 

我很好奇上面的Java代码。如果将代码粘贴到任何IDE并编译(javac),则会出现错误:zzz unresolved。 上面的错误说,即使你扩展它,你也不能从new Object()调用任何自定义函数。 现在的问题是:Kotlin生成这样的错误代码,但一切似乎都没问题,为什么?

+0

请显示反编译的FooKt $ bar $ foo $ 1.class – Rahul

回答