JVM是否需要实现所有接口方法?

时间:2014-03-08 13:59:21

标签: java grails groovy

我正在尝试groovy,所以我在groovy中编写一个示例HelloWorld程序并编译它&运行它工作正常,当我看到使用JAD反编译器编译的代码我的HelloWorld程序实现了一个GroovyObject接口,但它没有实现该接口中的所有方法,所以这意味着只有java编译器强制我们在接口中实现所有方法但是JVM不需要它。我是对的吗?

这是反编译的常规代码:

import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import org.codehaus.groovy.runtime.callsite.CallSite;

public class Helloworld_1   implements GroovyObject {
  public Helloworld_1()  {
    Helloworld_1 this;
    CallSite[] arrayOfCallSite = $getCallSiteArray();
    MetaClass localMetaClass = $getStaticMetaClass();
    this.metaClass = localMetaClass;  }

  public static void main(String... args){
    CallSite[] arrayOfCallSite =  $getCallSiteArray();
    arrayOfCallSite[0].callStatic(Helloworld_1.class, "Hello World");
  }  
 static {}
}

任何人请帮助......

1 个答案:

答案 0 :(得分:1)

使用Groovy Console时,我可以看到GroovyObject的实现。要显示生成的源代码,请选择脚本检查Ast ,然后选择 Class Generation 在阶段结束时 >。我也可以通过选择字节码选项卡来查看生成的字节码。

我认为负责实施GroovyObject方法的源代码位于org.codehaus.groovy.classgen.Verifier。有一个名为addGroovyObjectInterfaceAndMethods()的方法。您可以在https://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/classgen/Verifier.java#L310中找到源代码。