在Nashorn中扩展带有参数的抽象SAM类

时间:2016-01-18 18:46:21

标签: java nashorn

我正在尝试使用Javascript函数在Java中扩展抽象类。例如,var webPage = require('webpage'); var page = webPage.create(); page.viewportSize = { width: 1920, height: 1080 }; page.open("https://github.com", function start(status) { page.render('github.pdf', {format: 'pdf', quality: '100'}); phantom.exit(); });

test/A.java

package test; public class A { public A(String s) {} public abstract void go(Object a); }

test.js

评估上面的行会导致错误var myA = new Packages.test.A(function f(a) { print('Calling with '+a); }, 'hello'); ,但doc似乎表明此方法是实例化子类的有效方法:

  

如果抽象类有一个抽象方法(SAM类型),那么您可以传递实现该方法的函数,而不是将JavaScript对象传递给构造函数。以下示例显示了在使用SAM类型时如何简化语法:

Can not create new object with constructor test.A with the passed arguments; they do not match any of its method signatures
     

无论选择哪种语法,如果需要使用参数调用构造函数,都可以在实现对象或函数之后指定参数。

1 个答案:

答案 0 :(得分:2)

函数参数是最后一个,而不是第一个。文档有误,需要修复;我为此提出了an issue。谢谢你指出这一点。

var myA = new Packages.test.A('hello', function f(a) { print('Calling with '+a); });

应该有用。