Java ScriptEngine: использование значения на стороне Java?

Свифт:

tableView.setContentOffset(CGPointZero, animated: true)
7
задан Pierre 3 July 2009 в 10:45
поделиться

2 ответа

Эта ссылка может быть полезной. Кажется, лучшее, что вы можете сделать, - это положиться на конкретный класс реализации.

0
ответ дан 6 December 2019 в 23:12
поделиться

За исключением, возможно, простых значений, я бы предпочел позволить механизму сценариев преобразовывать свои значения в типы Java.

public class ScriptDemo {

  static class Result {
    private String[] words;

    public void setWords(String[] words) {
      this.words = words;
    }
  }

  static final String SCRIPT = "var foo = 'Hello World!';\n"
      + "result.setWords(foo.split(' '));";

  public static void main(String[] args)
      throws ScriptException {
    Result result = new Result();
    javax.script.ScriptEngineManager mgr = new ScriptEngineManager();
    javax.script.ScriptEngine scripEngine = mgr
        .getEngineByExtension("js");
    scripEngine.getContext().setAttribute("result", result,
        ScriptContext.ENGINE_SCOPE);
    scripEngine.eval(SCRIPT);
    System.out.println(Arrays.toString(result.words));
  }

}

Даже если вы не можете редактировать сценарий, вы можете взять возвращаемое значение и пропустите его через свой собственный сгенерированный скрипт, чтобы выполнить принуждение. Предполагается, что вы что-то знаете о возвращаемом значении.


РЕДАКТИРОВАТЬ: поскольку ничего не известно о возвращаемом значении, я бы сначала протестировал его с помощью Java ( getClass () ), чтобы увидеть, было ли оно одним из типы java.lang. Если возвращаемый объект принадлежит некоторому API, частному для библиотеки, я бы проанализировал его, используя язык сценариев (в данном случае JavaScript), возможно, принуждение его к типу Java или вставляя его свойства в некоторую структуру данных Java во время процесса.

Мой JavaScript заржавел, но учебник Джона Лича выглядит неплохо:

9
ответ дан 6 December 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: