What does IncompatibleClassChangeError signify?

Zhong Yu zhong.j.yu at gmail.com
Wed Sep 25 09:31:07 PDT 2013

I was hit by this problem before
and I think it is probably a javac/java bug.

It happened in a fairly complicated code base, I tried to but couldn't
reproduce the bug with a simpler code sample.

Zhong Yu

On Wed, Sep 25, 2013 at 3:41 AM, Millies, Sebastian
<Sebastian.Millies at softwareag.com> wrote:
> Hello there,
> This is with b106 under Windows. I have compiled some classes (no error) and then run one of them. At runtime I get:
> Exception in thread "main" java.lang.IncompatibleClassChangeError: Class java8.monads.MaybeDemo$$Lambda$1 does not implement the requested interface java8.monads.Monad
> at java8.monads.Monad.lambda$94(Monad.java:50)
>             at java8.monads.Monad$$Lambda$3.apply(Unknown Source)
>             at java8.monads.MaybeMonad.bind(MaybeMonad.java:23)
>             at java8.monads.Monad.lambda$93(Monad.java:50)
>             at java8.monads.MaybeMonad.lambda$93(MaybeMonad.java)
>             at java8.monads.Monad$$Lambda$2.apply(Unknown Source)
>             at java8.monads.MaybeMonad.bind(MaybeMonad.java:23)
>             at java8.monads.Monad.ap(Monad.java:51)
>             at java8.monads.MaybeMonad.ap(MaybeMonad.java)
>             at java8.monads.MaybeDemo.main(MaybeDemo.java:35)
>             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:491)
>             at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
> Now,  the code is likely very wrong, contains unchecked and perhaps illegal casts, erroneous type parameters etc. However, I'd have expected ClassCastException, NoSuchMethodError, ClassNotFoundException, whatever, but not a subclass of LinkageError. After all, how *could* any classes have changed? Why should re-linkage happen at all? No class has dependencies outside the JDK. Does something strange happen under the hood? Under what circumstances should I expect IncompatibleClassChangeError when using lambdas?
> Best,
> Sebastian
> Software AG - Sitz/Registered office: Uhlandstra?e 12, 64297 Darmstadt, Germany - Registergericht/Commercial register: Darmstadt HRB 1562 - Vorstand/Management Board: Karl-Heinz Streibich (Vorsitzender/Chairman), Dr. Wolfram Jost, Arnd Zinnhardt; - Aufsichtsratsvorsitzender/Chairman of the Supervisory Board: Dr. Andreas Bereczky - http://www.softwareag.com

More information about the lambda-dev mailing list