Default methods
Axel Dörfler
axeld at pinc-software.de
Thu Sep 24 11:02:00 UTC 2015
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.
More information about the nashorn-dev
mailing list