2014-02-06 2 views
1

Я новичок в Ruby & Jruby. Я хочу, чтобы проверить некоторые товары из JRuby в Java кодеПреобразование экземпляра класса org.jruby.RubyArray в класс java.util.ArrayList

Вот мой код:

import java.util.ArrayList; 
import java.util.HashMap; 
import org.jruby.embed.LocalVariableBehavior; 
import org.jruby.embed.ScriptingContainer; 

public class Test { 
    public static void main(String[] args){ 
     ScriptingContainer container = new ScriptingContainer(LocalVariableBehavior.PERSISTENT); 
     Test t = new Test(); 
     LogStatBean bean = t.new LogStatBean(); 
     container.setHomeDirectory("classpath:/META-INF/jruby.home"); 
     container.put("bean", bean); 
     container.runScriptlet("arr = [1, 2, 3, 4, 5, 6]"); 
     container.runScriptlet("puts arr"); 
     container.runScriptlet("bean.setOutput(arr) "); 
     System.out.println(bean.getOutput()); 

    } 
    public class LogStatBean { 
     public ArrayList<HashMap<String, Object>> getOutput() { 
      return output; 
     } 
     public void setOutput(ArrayList<HashMap<String, Object>> output) { 
      this.output = output; 
     } 
     public ArrayList<HashMap<String, Object>> output; 

    } 
} 

Я не могу установить локальную переменную Java с типом ArrayList в JRuby, это вызовет ошибку

TypeError: cannot convert instance of class org.jruby.RubyArray to class java.util.ArrayList 
    (root) at <script>:1 

Что мне делать?

ответ

0

массив в Ruby (обычно) преобразуется в массив Java - это либо остановить ожидая ArrayList или выполнить преобразование себя в Рубине ... этот кусок Руби должна быть полезной:

>> [1, 2, 3].class 
=> Array 
>> [1, 2, 3].to_java.java_class 
=> class [Ljava.lang.Object; 
>> [1, 2, 3].to_java('java.lang.Integer').java_class 
=> class [Ljava.lang.Integer; 
>> java.util.ArrayList.new [1, 2, 3] 
=> #<Java::JavaUtil::ArrayList:0x1b802d73> 
>> java.util.Arrays.asList([1, 2, 3].to_java) 
=> #<Java::JavaUtil::Arrays::ArrayList:0x10478ebc> 
Смежные вопросы