【问题标题】:Calling static Java methods from rhino javascript从 rhino javascript 调用静态 Java 方法
【发布时间】:2012-01-30 06:32:21
【问题描述】:

我有静态 java 方法,我用这个方法添加到 javascript:

public void addJavaMethod(Method method)
{
    try
    {
            FunctionObject fo = new FunctionObject(method.getName(), method, m_scope);
            FunctionObject.putProperty(m_scope, method.getName(), fo);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

我总是在这些方法中使用对象类作为参数,否则会出现错误,例如:

而不是

static void setSomeFloatValueHere(float value){}

我用:

static void setSomeFloatValueHere(Object value)
{//convert this object to a float}

使用布尔值我可以进行直接转换:

static void setBoolean(Object b){someBooleanObject = (Boolean)b;}

但是对于 int、float、long、double 等,我无法做到这一点。 我收到一个错误:

org.mozilla.javascript.Undefined cannot be cast to java.lang.Integer

我怎样才能让它也适用于这些类型?可能还有其他非原始类型对象? 谢谢

【问题讨论】:

    标签: java javascript methods rhino


    【解决方案1】:

    您的对象可能不是整数,而是具有 intValue()

    Number

    您可以使用 value.getClass().getName() 检查实际类型。

    【讨论】:

    • 谢谢,您对某些事情的错误类型是正确的,就像我发现只有双精度数,而不是浮点数。不过,我坚持长期价值观。在 js 中,如果我输入: var x = 0;设置长(x);其中 setLong 需要一个长值,我以您编写的方式检查了类型,并得到“org.mozilla.javascript.Undefined”。 0 不应该是未定义的吗?另外,对于其他更复杂的对象,我可以使用 NativeJavaObject 作为参数而不是 Object,并使用 NativeJavaObject.unwrap(); 获取对象值;
    • @user1177453 没有浮动?在哪里?
    猜你喜欢
    • 2014-06-13
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多