Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSR223 Javascript中的回调,OracleJRE1.6和OpenJDK1.6之间的差异(如安装在Debian上)_Java_Javascript_Openjdk_Jsr223 - Fatal编程技术网

JSR223 Javascript中的回调,OracleJRE1.6和OpenJDK1.6之间的差异(如安装在Debian上)

JSR223 Javascript中的回调,OracleJRE1.6和OpenJDK1.6之间的差异(如安装在Debian上),java,javascript,openjdk,jsr223,Java,Javascript,Openjdk,Jsr223,考虑到以下情况,使用OracleJRE6运行会给出输出boo,但OpenJDK6会给出一个异常 javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: The choice of Java constructor replace matching JavaScript argument types (function,string) is ambiguous; candidate construc

考虑到以下情况,使用OracleJRE6运行会给出输出boo,但OpenJDK6会给出一个异常

javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: The choice of Java
constructor replace matching JavaScript argument types (function,string) is ambiguous; candidate 
constructors are: 
    class java.lang.String replace(char,char)
    class java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence) (<Unknown source>#1) 
in <Unknown source> at line number 1

Java SE 6规范()只说:

不会要求任何 可以使用特定的脚本语言 由平台支持; 实现者可以选择包括 对脚本语言的支持 在他们看来,这是他们的选择

据我所知,没有正式的规范说明如何将Java类型集成到JavaScript中。这是不幸的,但没有理由期望实现之间100%的兼容性


我相信OracleJRE和OpenJDK都附带Rhino,但是版本级别、补丁等方面没有保证。

只是出于好奇,如果传递到
replace
的参数长度超过一个字符,它会做什么?我不确定我是否理解这个问题。我碰巧给出了一个使用单字符regexp和单字符字符串的示例,但是更长的参数是可能的,并且其行为与您预期的一样(假设您熟悉支持regexp的内容)。确保它们是可能的。我只是想知道它是否强制将它们转换为char,因为它们只有一个字符长,并且想知道更长的字符串是否映射到CharacterSequence.AFAIK相关的东西是Javascript
String
对象(正则表达式可能是
RegExp
对象),即使它们恰好只有一个字符长。(然而,我不是Javascript专家,所以可能我弄错了。)我怀疑你是对的,这只是没有具体说明。我想这并不奇怪,在这种情况下也不那么可怕:在Javascript的正确位置插入
新字符串(…)
,也不算太糟糕。
import javax.script.*;

class st {
    public static void main(String[] args) {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
        Bindings bindings = jsEngine.getBindings(ScriptContext.ENGINE_SCOPE);
        Foo foo = new Foo();
        bindings.put("v", foo);
        try {
            jsEngine.eval("v.run(function(a) {println(a.replace(/f/,\"b\"));})");
        } catch (ScriptException ex) {
            ex.printStackTrace();
        }    
    }
}
public class Foo {
    public void run(FooCB cb) {
        cb.run("foo");
    }
    public static interface FooCB {
        public void run(Object val);
    }
}