【发布时间】:2013-08-18 17:14:40
【问题描述】:
在学习了 Java 中的 Lambda 表达式后,我尝试练习一些简单的示例。但在我的第一个示例中,只有我收到以下错误。
Exception in thread "main" java.lang.IncompatibleClassChangeError
at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:384)
at com.example.lambda.HelloLambda.main(HelloLambda.java:15)
Caused by: java.lang.NoSuchMethodException: no such method: java.lang.invoke.LambdaMetafactory.metaFactory(Lookup,String,MethodType,MethodHandle,MethodHandle,MethodType)CallSite/invokeStatic
at java.lang.invoke.MemberName.makeAccessException(MemberName.java:763)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:880)
at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1019)
at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1284)
at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:382)
... 1 more
Caused by: java.lang.NoSuchMethodError: java.lang.invoke.LambdaMetafactory.metaFactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:852)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:877)
... 4 more
由于向后兼容性问题,该错误似乎是一个错误。但不知道如何解决这个问题。 StackOverFlow 中的许多答案建议重新编译可以解决此问题。但我仍然收到此错误。
我的代码
package com.example.lambda;
public class HelloLambda {
static String firstname = "ChanSek";
static String lastname = "Nayak";
interface HelloService {
String hello();
}
public static void main(String[] args) {
HelloService helloService =
() -> {String hello="Hello " + firstname + " " + lastname;
return hello;};
System.out.println(helloService.hello());
}
}
代码编译良好。但是运行会出现上述错误。
我正在使用 JDK1.8.0 快照。
【问题讨论】:
-
您需要下载JDK 8 with Lambda Support。检查一下,如果你只下载了那个 JDK。
-
@RohitJain 是的,当然我已经下载了JDK1.8.0。否则它根本不会编译。
-
这对我来说运行良好。你用的是JDK自带的JVM吗?另外你使用的是什么版本号?早期版本有问题
-
对我来说也很好。