Вызов метода Java из Ruby, который принимает двойное примитивное Java с Ruby BigDecimal

Я получаю сообщение об ошибке при попытке вызвать метод для объекта Java из JRuby, когда сигнатура метода Java имеет примитивное двойное значение, а параметр, который я передаю, является Ruby BigDecimal. Возможно ли какое-либо неявное преобразование или его нужно обрабатывать явно. Я вызываю метод объекта Java с помощью send, если это имеет значение.

java_object.send :some_method, a_big_decimal

(На самом деле это может вызывать методы с сигнатурами разных типов в объекте Java, поэтому мне не нужно беспокоиться только о BigDecimals здесь, поэтому я бы хотел избежать явной обработки этого, если это возможно)

я тоже пробовал

java_object.send :some_method, a_big_decimal.to_java

Но это вызывает другую ошибку:

TypeError: cannot convert instance of class org.jruby.java.proxies.ConcreteJavaProxy to double

person Will Gorman    schedule 06.09.2011    source источник


Ответы (1)


Я как раз гуглил в поисках решения похожей проблемы, когда наткнулся на этот вопрос (всего через 3 часа после того, как вы его опубликовали... блин, Гугл быстрый!).

В конце концов я смог решить свою проблему, выполнив (эквивалент) этого:

java_object.some_method a_big_decimal.to_f

Надеюсь, это сработает для вас?

person machineghost    schedule 07.09.2011
comment
Да, я тоже так в итоге сделал. Я просто надеялся, что есть способ сделать это неявно, поскольку в моем случае параметр может быть другого типа, кроме BigDecimal. Я должен был проверить is_a? Сначала BigDecimal, и это было немного уродливо. - person Will Gorman; 07.09.2011