我正在尝试使用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
无论选择哪种语法,如果需要使用参数调用构造函数,都可以在实现对象或函数之后指定参数。
答案 0 :(得分:2)
函数参数是最后一个,而不是第一个。文档有误,需要修复;我为此提出了an issue。谢谢你指出这一点。
var myA = new Packages.test.A('hello', function f(a) { print('Calling with '+a); });
应该有用。