为什么获取方法引用的字节代码调用`Object.getClass()`?

时间:2017-04-14 02:43:58

标签: java lambda bytecode method-reference

当我编译这个简单的代码时

class Main {
    public void execute() {    }

    public static void main(String[] args) {
        Runnable run = new Main()::execute;
    }
}

我得到主方法的以下字节代码:

 0  new user.Main [2]
 3  dup
 4  invokespecial user.Main() [3]
 7  dup
 8  invokevirtual java.lang.Object.getClass() : java.lang.Class [4] // <--- ???
11  pop
12  invokedynamic 0 run(user.Main) : java.lang.Runnable [5]
17  astore_1 [run]
18  return

我想知道为什么编译器决定发出invokevirtual java.lang.Object.getClass()直接跟随pop。这看似毫无用处的电话的目的是什么?

0 个答案:

没有答案