java - 在 rhino (JavaScript) 的 Java 方法上使用 .apply()

标签 java javascript rhino

我想使用 rhino 的(JavaScript 的)function.apply() 将参数传递给 varags Java 方法,如下所示:

function sprintf()
{
    return java.lang.String.format.apply(arguments);
}
sprintf("%d\n", 5);

但是调用 sprintf() 会报错:

Error: can't find method java.lang.String.format().

我想这是因为 format() 方法不是一个正确的 JavaScript 函数而是一个 Java 方法,所以它没有定义 apply()。 (虽然错误消息似乎不是这么说的,但也许不是。)

我发现我可以添加自己的 apply() 方法:

java.lang.String.format.apply = function() {}

但是如果你明白我的意思的话,我看不出没有 apply() 怎么写 apply()。有什么想法吗?

最佳答案

@文森特蒙特雷索

这是一个部分解决方案:

function sprintf(string) {
  var args = Array.prototype.splice.call(arguments, 1);

  for (var i = 0; i < args.length; i++) {
    if (!isNaN(args[i])) {
      args[i] = new java.lang.Integer(args[i]);
    }    
  }

  return java.lang.String.format(String(string), args);
}

有几个问题:

  • 在您的实现中,未正确使用 .format() 方法签名,即第一个参数应为字符串
  • 参数列表中的数值必须转换为正确的 java 类型。

调用示例:

print(sprintf("Hello %s %d", "number", 2));

产生:“Hello number 2”

关于java - 在 rhino (JavaScript) 的 Java 方法上使用 .apply(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821431/

相关文章:

javascript - 如何向后移动光标

java - 是否可以在 Java 6 中为 RhinoScriptEngine 设置优化级别?

javascript - RingoJS javascript - 在控制台上获取用户输入

java - 如何在 Libgdx Box2d 中保持 body 不渲染?

java - 如何通过排序方法组织字符串

java - 在 Java 7 中朝鼠标方向旋转 2D 图像

javascript - 鼠标悬停工具提示不会固定在右上角

java - box2d 、 libgdx - 玩家 body 具有宇宙飞船的相对速度,但仍然能够移动

javascript - 在文本区域字段中设置焦点和突出显示

javascript - 为什么在 Rhino 中执行的 JavaScript 脚本中声明一个简单的 JSON 对象不起作用?