java - 为什么编译接口(interface)后, "default"方法修饰符从 "javap -v"消失了?

标签 java default-method javap

我观察到,在编译包含 default 方法定义的接口(interface)后,例如:

interface Delta {

    default void someMethod() {
        System.out.println("Hi.");
    }

}

反汇编相应的.class文件后(仅包括相应的代码片段):

javap -v Delta.class

####

{
  public void someMethod();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
         0: getstatic     #1                  // Field java/lang/System.out:Ljava/io/PrintStream;
         3: ldc           #2                  // String Hi.
         5: invokevirtual #3                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
         8: return
      LineNumberTable:
        line 10: 0
        line 11: 8
}

default 修饰符消失了。

谁能解释一下 - 为什么?

我正在运行:

openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

请注意,我知道,当没有定义修饰符时,所有方法都是隐式的public。所以,我是not asking 为什么 public 修饰符出现在文件的编译版本中。

最佳答案

看起来确实像一个 javap bug,请参阅 this defect 。当添加新功能时,我遇到了更多这样的 javap 问题,仅供引用。

关于java - 为什么编译接口(interface)后, "default"方法修饰符从 "javap -v"消失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68596227/

相关文章:

Java从科学记数法转换为浮点型

java - 在 Java 中显式调用默认方法

java - 如何在 eclipse 中使用 javap?

java - Eclipse Sonar Lint 默认配置文件

用户定义类型的 Java 数组

java - 如何使用 java 或 jsoup 获取绝对 url

java - Java 8 中的接口(interface)隔离原则和默认方法

spring-data-rest - Spring Data Rest-公开默认方法

java - .class 文件没有 LineNumberTable

scala - 在 sbt 项目的类路径中添加 tools.jar