相关疑难解决方法(0)

在Java 8中转换lambdas

Java 8似乎生成了表示lambda表达式的类.例如,代码:

  Runnable r = app::doStuff;
Run Code Online (Sandbox Code Playgroud)

大致表现为:

  // $FF: synthetic class
  final class App$$Lambda$1 implements Runnable {
    private final App arg$1;

    private App$$Lambda$1(App var1) {
        this.arg$1 = var1;
    }

    private static Runnable get$Lambda(App var0) {
        return new App$$Lambda$1(var0);
    }

    public void run() {
        this.arg$1.doStuff();
    }
  }
Run Code Online (Sandbox Code Playgroud)

据我了解,代码是在运行时生成的.现在,假设有人想将代码注入run上述类的方法中.迄今为止的实验产生了NoClassDefFoundVerifyError:

java.lang.NoClassDefFoundError: App$$Lambda$2
    at App$$Lambda$2/1329552164.run(Unknown Source)
    at App.main(App.java:9)
Caused by: java.lang.ClassNotFoundException: App$$Lambda$2
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more
Run Code Online (Sandbox Code Playgroud)

这是针对:

$ java -version
java …
Run Code Online (Sandbox Code Playgroud)

java instrumentation bytecode java-8

15
推荐指数
2
解决办法
2536
查看次数

标签 统计

bytecode ×1

instrumentation ×1

java ×1

java-8 ×1