Потенциально немой вопрос, но я не мог найти прямой документации об этом, так что вот оно.выставить метод toString для объектов js в nashorn
Я хотел бы предоставить Java-конструктор стороне JS, при создании экземпляра он должен создать экземпляр с методом «toString».
// java class
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import jdk.nashorn.api.scripting.AbstractJSObject;
public class Foo extends AbstractJSObject {
String bar;
public Foo() {
super();
}
public Foo(String b) {
super();
this.bar = b;
}
@Override
public Object newObject(Object... args) {
String bar = null;
if (args[0] != null) bar = args[0].toString();
Foo f = new Foo(bar);
return f;
}
@Override
public String toString() {
return "Foo: " + this.bar;
}
public static void main(String[] args) {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.put("foo", new Foo());
// f.toString however is null
engine.eval("var f = new foo('hi'); f.toString();")
}
}
ли код, который вы в настоящее время не сделать это? В чем проблема, с которой вы столкнулись в данный момент? –
@ PeterDavidCarter-Poulsen Это не так. toString имеет значение null для экземпляров из нового foo (...) –