2013-07-14 9 views
0

Я пытаюсь инициализировать this class из библиотеки программирования ограничений JaCop от jRuby. Я использую правильный тип аргументов, но по какой-то причине, я получаю сообщение об ошибке:Вызов метода Java из JRuby бросает «no constructor for arguments error»

NameError: no constructor for arguments 
    (
     org.jruby.RubyArray, 
     org.jruby.RubyArray, 
     org.jruby.RubyArray, 
     JaCoP.core.IntVar, 
     JaCoP.core.IntVar) 
    on Java::JaCoPConstraintsKnapsack::Knapsack 
    (root) at rb/knapsack.rb:24 

Код, который он указывает на это:

k = Jacop::Knapsack.new(@values, @weights, quantity, knapsackCapacity, knapsackProfit) 

Сигнатура конструктора класса Java это:

public Knapsack(int[] profits, 
       int[] weights, 
       IntVar[] quantity, 
       IntVar knapsackCapacity, 
       IntVar knapsackProfit) 

Я не понимаю, почему JRuby жалуется, что конструктор не найден, потому что он должен быть в состоянии найти это.

ответ

2

JRuby не всегда может угадать «сложные» метод арг для вас, вы можете попробовать:

Jacop::Knapsack.new(@values, @weights, quantity.to_java(JaCoP.core.IntVar), knapsackCapacity, knapsackProfit)

или даже помочь с int[] броском (не должно быть необходимым):

Jacop::Knapsack.new(@values.to_java(:int), @weights.to_java(:int), quantity.to_java(JaCoP.core.IntVar), knapsackCapacity, knapsackProfit)

+0

Вы были абсолютно правы. Я должен был бросить ints, чтобы заставить его работать. – picardo

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

  • Нет связанных вопросов^_^