ArrayList

JRuby は使い方を検索してもあまりヒットしないんだよなぁ・・・これはチャンスでもあるのかな?(何の?)

jirb で動作確認してみる。

irb(main):002:0> include_class 'java.util.ArrayList'
=> ["java.util.ArrayList"]
irb(main):003:0> list = ArrayList.new
=> #<Java::JavaUtil::ArrayList:0xdb3331 @java_object=[]>
irb(main):004:0> list.add "a"
=> true
irb(main):005:0> list.push "b"
NoMethodError: undefined method `push' for #<Java::JavaUtil::ArrayList:0xdb3331
@java_object=[a]>
        from (irb):6:in `puts'
irb(main):006:0> list << "b"
=> #<Java::JavaUtil::ArrayList:0xdb3331 @java_object=[a, b]>
irb(main):007:0> puts list
[a, b]
=> nil

java.util.ArrayList で include したのに、ArrayList.new すると java::JavaUtil::ArayList になっている。変換テーブルでもあるのかな?そのおかげか、「<<」 がつかえるけど push は無い。indexOf なんかも普通に使える。試しに ArrayList をパッケージ付きで new してみる。

irb(main):008:0> list = java.util.ArrayList.new
=> #<Java::JavaUtil::ArrayList:0x543cb1 @java_object=[]>

やっぱ変わっちゃう。

ArrayList に push メソッドを追加しちゃう

irb(main):001:0> include_class 'java.util.ArrayList'
=> ["java.util.ArrayList"]
irb(main):002:0> class ArrayList
irb(main):003:1>   def push(p)
irb(main):004:2>     self << p
irb(main):005:2>   end
irb(main):006:1> end
=> nil
irb(main):007:0> list = ArrayList.new
=> #<Java::JavaUtil::ArrayList:0xa75737 @java_object=[]>
irb(main):008:0> list.push "a"
=> #<Java::JavaUtil::ArrayList:0xa75737 @java_object=[a]>

できた〜♪