예제를 참조하십시오. jsr223을 사용하지만 아이디어를 얻을 수 있습니다. 나는 Rhino에 MyClass의 한 인스턴스를 가진리스트를 넘겨 주며, (자바 메소드 호출을 통해) 그것을 수정하고 마지막으로 또 다른 요소를 추가한다.
package lv.test;
import java.util.ArrayList;
import java.util.List;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class MyClass {
private int field;
public int getField() {
return field;
}
public void setField(final int field) {
this.field = field;
}
public String toString() {
return String.format("{%d}", field);
}
public static void main(String[] args) throws ScriptException {
final ScriptEngineManager manager = new ScriptEngineManager();
final ScriptEngine e = manager.getEngineByName("js");
final Bindings b = e.getBindings(ScriptContext.ENGINE_SCOPE);
final List<MyClass> somelist = new ArrayList<MyClass>();
somelist.add(new MyClass());
b.put("somelist", somelist);
final StringBuilder script = new StringBuilder()
.append("function abc(x,y) { return x+y+new java.lang.Integer(2).intValue(); }")
.append("somelist.get(0).setField(abc(2,3));")
.append("somelist.add(new Packages.lv.test.MyClass()); somelist.get(1).setField(888);");
e.eval(script.toString());
System.out.println(somelist); // [{7}, {888}]
}
}
무엇을 자바 스크립트로 가져 오나요? 자바 클래스? – MaVRoSCy
@MaVRoSCy : 네, JavaScript로 제 자신의 클래스를 사용하고 싶습니다. JSON에 대한 직렬화는 내가 가진 한 가지 아이디어였다 ... – hans