我在一些只返回输入的Javascript中传递Integer.MIN_VALUE。但是,似乎当我使用ScriptValueConverter.unwrapValue(returnedObject)
比较Javascript的结果时,值是相同的但是类型是double,而我期待一个整数。
但是当我传入Integer.MAX_VALUE时,我会得到一个整数。
根据我的理解,Nashorn使用乐观类型转换,所以在我看来,MIN_VALUE仍然可以是一个int,它不需要它是双重的
答案 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的简要说明。