java - JVM不需要实现所有的接口(interface)方法吗?

原文 标签 java grails groovy

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

这是反编译的 groovy 代码:

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 {}
}

任何人请帮助....

最佳答案

我可以看到 GroovyObject 的实现使用 Groovy 控制台时。为了显示生成的源代码,我选择 Script、Inspect Ast,然后为 At end of Phase 选择 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 中找到源代码.

关于java - JVM不需要实现所有的接口(interface)方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270266/

相关文章:

java - 无法@Override Java 中的 compareTo() 方法

java - 打印分割字符串

exception - Groovy on Grails的初学者问题

grails - 嵌套 GORM 嵌入

grails - gradle:未排序的dependsOn任务,如何处理?

Jenkins通过Groovy脚本通过远程禁用CLI

来自 Scanner 的 java.util.NoSuchElementException

java - 严重 : A message body writer for Java class java. util.ArrayList 和 MIME 媒体类型应用程序/json 未找到

javascript - Grails:<script>与<g:javascript>

java - 测试类中的 spock 框架覆盖方法