为什么Integer.MIN_VALUE被nashorn视为双重?

时间:2017-06-07 13:34:42

标签: java-8 nashorn

我在一些只返回输入的Javascript中传递Integer.MIN_VALUE。但是,似乎当我使用ScriptValueConverter.unwrapValue(returnedObject)比较Javascript的结果时,值是相同的但是类型是double,而我期待一个整数。

但是当我传入Integer.MAX_VALUE时,我会得到一个整数。

根据我的理解,Nashorn使用乐观类型转换,所以在我看来,MIN_VALUE仍然可以是一个int,它不需要它是双重的

1 个答案:

答案 0 :(得分:0)

我认为问题不在于Nashorn本身,而是您正在运行的javascript代码或您正在使用的第三方转换器(ScriptValueConverter既不是javax.script也不是jdk.nashorn

我运行了以下代码:

    ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("nashorn");
    jsEngine.eval("function identity(x) {return x;}");
    System.out.println("Integer.MIN_VALUE:" + ((Invocable) jsEngine).invokeFunction("identity", Integer.MIN_VALUE).getClass());
    System.out.println("Integer.MAX_VALUE:" +((Invocable) jsEngine).invokeFunction("identity", Integer.MAX_VALUE).getClass());

,输出为:

Integer.MIN_VALUE: class java.lang.Integer
Integer.MAX_VALUE: class java.lang.Integer

您可以在此处找到有关nashorn type conversions的简要说明。