2012-01-30 3 views
2

у меня есть статические методы Java, которые я добавляю в JavaScript с помощью этого метода:Вызов статических методов 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;} 

Но с междунар, поплавком, длинной, двойной и т.д., я не могу это сделать. я получаю сообщение об ошибке:

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

Как я могу получить эту работу с этими типами, а? и, возможно, другие объекты не примитивного типа? Благодаря

ответ

1

Ваш объект, вероятно, не является целым числом, а скорее номер который имеет intValue()

Вы можете проверить фактический тип, используя value.getClass(). GetName().

+0

Спасибо, вы правы насчет неправильных типов для некоторых вещей, например, я обнаружил, что есть только парные, а не плавает. Тем не менее, я придерживаюсь длинных ценностей. В js, если я положил: var x = 0; setLong (х); где setLong принимает длинное значение, я проверил тип так, как вы написали, и я получаю «org.mozilla.javascript.Undefined». 0 Не должно быть неопределенным, если это так? Кроме того, я могу использовать NativeJavaObject в качестве параметра вместо объекта для других более сложных объектов и получить значение объекта с помощью NativeJavaObject.unwrap(); – user1177453

+0

@ пользователь1177453 нет плавает? Где? –

Смежные вопросы