execution fails with IncompatibleClassChangeError
Anna Kozlova
Anna.Kozlova at jetbrains.com
Tue Dec 18 03:38:02 PST 2012
Hello,
Running the following class
{code}
public class FooBar {
private static final class Bar {
private Bar() {
}
}
private interface I {
Bar create();
}
static void foo(I intf) {}
public static void main(String[] args) throws Exception {
foo(Bar::new);
}
}
{code}
fails with
Exception in thread "main" java.lang.IncompatibleClassChangeError
at
java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNa
tives.java:383)
at p.FooBar.main(FooBar.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57
)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:43)
at java.lang.reflect.Method.invoke(Method.java:474)
at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.IllegalAccessException: member is private:
p.FooBar$Bar.<init>()void/invokeSpecial, from p.FooBar
at
java.lang.invoke.MemberName.makeAccessException(MemberName.java:732)
at
java.lang.invoke.MethodHandles$Lookup.checkAccess(MethodHandles.java:1135)
at
java.lang.invoke.MethodHandles$Lookup.getDirectConstructor(MethodHandles.jav
a:1243)
at
java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles
.java:1270)
at
java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNa
tives.java:381)
... 6 more
If I convert method reference to lambda expression or anonymous class
everything works correctly. Checked with b68.
Thank you
Anna
More information about the lambda-dev
mailing list