Axel,

thanks for a very comprehensive demonstration of the problem. I agree these 
should work; I’ll investigate to see what’s up with them. I raised 
https://bugs.openjdk.java.net/browse/JDK-8137093 
<https://bugs.openjdk.java.net/browse/JDK-8137093> to track the issue.

Thanks,
  Attila.

> On Sep 24, 2015, at 1:02 PM, Axel Dörfler <[email protected]> wrote:
> 
> Hi there,
> 
> I'm currently trying to implement an interface from JavaScript that has 
> default implementations. Unfortunately, it's not working.
> 
> That's the code at the Java side:
>    interface A {
>        default void a() {
>            System.out.println("a");
>        }
>    }
>    interface B extends A {
>        default void b() {
>            System.out.println("b");
>        }
>        default void c() {
>            System.out.println("c");
>        }
>    }
> 
> And that's the one in JavaScript:
>    var B = Java.type("my.package.B");
>    new B({
>       b: function() {
>               doMyStuff();
>       }
>    });
> 
> If I invoke a() on the new object, I get the following error:
>    java.lang.IncompatibleClassChangeError: Interface method reference: 
> my.package.A.a(;)Z, is in an indirect superinterface of 
> my.package.B$$NashornJavaAdapter
> 
> The same works just fine in Java, so I assume that this is an actual bug in 
> the Nashorn implementation, as I can invoke c() without a problem.
> Is this known or even accepted behavior?
> 
> Also, when I create a class of this:
> public class C implements B {
> }
> 
> I cannot use the following:
>    var C = Java.type("my.package.C");
>    new C({
>        b: function() {
>           doMyStuff();
>       }
>    });
> 
> I get this error:
> javax.script.ScriptException: TypeError: Can not construct my.package.C with 
> the passed arguments; they do not match any of its constructor signatures. in 
> <eval> at line number 2
> 
> Removing the default methods, all is working as expected.
> 
> Kind regards,
>   Axel Dörfler.

Reply via email to