2013-09-26 3 views
0

공유 Java 클래스를 변경할 수있는 스크립트를 실행하기 위해 Java ScriptEngine을 사용했습니다. Java 클래스에서 동적으로 생성 된 변수를 지원할 수 있는지 궁금합니다.Java ScriptEngine - Java 클래스에서 동적 변수 작성

// create a script engine manager 
ScriptEngineManager factory = new ScriptEngineManager(); 

// create a JavaScript engine 
ScriptEngine engine = factory.getEngineByName("JavaScript"); 
engine.put("javaclass", jClass); 

engine.eval("javaclass.propertyThatDoesNotExist = 'test'"); // throws exception 

답변

0

당신은 ScriptEngine#put(String key, Object value) 방법을 사용하여, 엔진의 자바 스크립트 변수를 등록 할 수 있습니다. 예를 들어 :

int i = ((Double) engine.eval("i")).intValue(); 
System.out.println("JavaScript variable in Java; i = " + i); 
0

자바는 동적 언어되지 않습니다 :

engine.put("i", 10); 

이것은 당신이 등록 된 변수를 검색 할 수있는 방법이다. 따라서 해당 클래스/객체에 속성/변수를 추가 할 수 없습니다. 이를 위해서는 Groovy 나 Java Script와 같은 다른 언어를 사용해야합니다.

+0

groovy로 같은 코드를 시도했지만 동일한 오류 (공용 속성 없음)도 실패했습니다. 이 게시 http://stackoverflow.com/a/6569565/1228906 게시물을 사용하여 동적으로 스크립트에서 속성을 만들 수 있었지만 ScriptEngine에서 동일한 작업을 수행하지 못했습니다. 그래도 고마워! – webber

+0

"바인딩"을 사용했다고 가정합니다. 당신은 "클래스"동력학에 "속성"을 추가하지 않습니다. 동적 전역 변수 만 정의 할 수 있습니다. –

관련 문제