IncompatibleClassChangeError example

Peter Levart peter.levart at gmail.com
Tue Jun 18 00:29:30 PDT 2013


Just a reminder that the following problem is still present...

Regards, Peter

On 06/09/2013 05:24 PM, Peter Levart wrote:
> Hi,
>
> When I compile and run the following program with the latest tip of 
> lambda repo:
>
>
> import java.util.function.Function;
> import java.util.function.Supplier;
>
> public class ICCEBug {
>
>     interface Value<T> extends Supplier<T> {
>         default <R> Value<R> map(Function<? super T, ? extends R> 
> mapper) {
>             return new SuppliedValue<>(() -> mapper.apply(this.get()));
>         }
>     }
>
>     static class SuppliedValue<T> implements Value<T> {
>         private final Supplier<T> supplier;
>
>         SuppliedValue(Supplier<T> supplier) {
>             this.supplier = supplier;
>         }
>
>         @Override
>         public T get() {
>             return supplier.get();
>         }
>     }
>
>     public static void main(String[] args) {
>         Value<String> name = () -> "Peter";
>         Value<String> sentence = name.map(nm -> "Hello " + nm + "!");
>         System.out.println(sentence.get());
>     }
> }
>
>
>
> ... I get the following exception:
>
> Exception in thread "main" java.lang.IncompatibleClassChangeError: 
> Class ICCEBug$$Lambda$2 does not implement the requested interface 
> ICCEBug$Value
>     at ICCEBug$Value.lambda$0(ICCEBug.java:17)
>     at ICCEBug$Value$$Lambda$3.get(Unknown Source)
>     at ICCEBug$SuppliedValue.get(ICCEBug.java:30)
>     at ICCEBug.main(ICCEBug.java:37)
>
>
>
> It looks like something is not compiled correctly.
>
> Regards, Peter
>



More information about the lambda-dev mailing list