有没有办法查看类型擦除后我的代码的样子?

Joh*_*yer 5 java generics

我想知道用什么工具可以查看类型擦除后的代码。例如,我想看看下面的代码在类型擦除后是什么样子。我知道通用类型信息在最终编译之前被剥离,用对象或边界类型替换类型引用,创建桥接方法等。我想在擦除过程发生后查看源代码。

  public static void main(String[] args) {
    Predicate<Object> objPredicate = (Object c) -> c.toString().length() > 2 ;
    Predicate<? super Integer> predicate = objPredicate;
    Number n = Integer.valueOf(22);
    System.out.println(predicate.test(n)); //this line does not compile
  }
Run Code Online (Sandbox Code Playgroud)

[如果需要编译代码才能看到擦除检查工具在示例中工作,则可以省略非编译行或n可以将其转换为Integer]

Joh*_*yer 0

在github上,我找到了基于java的开源GUI工具字节码查看器,它的工作如下:

 public static void main(String[] var0) {
      Predicate var1 = (var0x) -> {
         return var0x.toString().length() > 2;
      };
      Integer var3 = 22;
      System.out.println(var1.test(var3));
   }
Run Code Online (Sandbox Code Playgroud)

为此,我将视图菜单设置为 Pane 2/Fernflower/Java。