我团队中的某个人正在编写一个 ruby/cucumber 测试,该测试调用一个带有List<Long>
参数的 java api。我正在努力帮助他,但我的 jruby 知识非常有限。每当调用 java 方法时,List<Long>
java 方法都会抛出某种类转换异常,因为 ArrayList 包含所有 rubyFixnum
对象。
以下简化代码显示我总是得到一个 Fixnum 而不是 Java::JavaLang::Long
irb(main):017:0> java.util.ArrayList.new([12.to_java])[0].class
=> Fixnum
即使以下显示 12.to_java 产生一个 Long
irb(main):018:0> 12.class
=> Fixnum
irb(main):019:0> 12.to_java.class
=> Java::JavaLang::Long
我也试过不使用构造函数 args
irb(main):020:0> a = java.util.ArrayList.new
=> #<Java::JavaUtil::ArrayList:0x314e60d2>
irb(main):021:0> a.add(12.to_java)
=> true
irb(main):022:0> a[0].class
=> Fixnum
并且直接实例化 java.lang.Long
irb(main):023:0> a = java.util.ArrayList.new
=> #<Java::JavaUtil::ArrayList:0xfdcb343>
irb(main):024:0> a.add(java.lang.Long.new(12))
=> true
irb(main):025:0> a[0].class
=> Fixnum
我的最后一次尝试
irb(main):026:0> b = 12.to_java
=> #<Java::JavaLang::Long:0x244ff48e>
irb(main):027:0> b.class
=> Java::JavaLang::Long
irb(main):028:0> a = java.util.ArrayList.new
=> #<Java::JavaUtil::ArrayList:0x6a36ebaa>
irb(main):029:0> a.add b
=> true
irb(main):030:0> a.get(0).class
=> Fixnum