rjbタグ新設。jdk1.6.0+rjb_trunkで以下のコードが実行できる。どう考えても呼出前にIntegerとかに変換してるからなのだが、ずっとこんな感じだっけ?
def test_autoboxing
assert_equal(false, Rjb::primitive_conversion)
test = import('jp.co.infoseek.hp.arton.rjb.Test')
tr = import('java.util.TreeMap')
tree = tr.new
tree.put(1, 128)
tree.put(2, 256)
test.setSortedMapS(tree)
assert_equal 128, tree.get(1).intValue
assert_equal 256, tree.get(2).intValue
end
Hashのキー,値にFixnumがそのまま使える点に注目。
あんまり関係ないけどさ、以下は覚えておくべき。
Integer.hashCode():この Integer オブジェクトが表すプリミティブ型 int 値に等しい。
Integer.equals():結果が true になるのは、引数が null ではなく、このオブジェクトと同じ int 値を含む Integer オブジェクトである場合だけです。
Collections Framework インタフェース内の多数のメソッドは、equals メソッドとの関連で定義されます。たとえば、containsKey(Object key) メソッドの仕様は、「このマップコレクションに (key==null ?k==null : key.equals(k)) を満たすキー k が含まれる場合にのみ、true を返す」というものです。."この仕様は、「null 以外の引数 key を使用して Map.containsKey を呼び出すと、キー k で key.equals(k) が呼び出される」と理解すべきではありません。実装は、最初に 2 つのキーのハッシュコードを比較するなど、equals 呼び出しを回避するための最適化を自由に実装できます。(Object.hashCode() 仕様では、等価ではないハッシュコードを保持する 2 つのオブジェクトは等価ではないことが保証されます)。通常、さまざまな Collections Framework インタフェースの実装で、実装者が適切と判断するなら、基盤となる Object メソッドの指定された動作を自由に利用できます。