結構JVMのライブラリのImplって変わるものなのね・・・

javassistを使っているライブラリで、WAS6.1でのみエラーが起きる現象に当たった。
問題となったのは、HashMapとLinkedHashMapの辺りで、JVM間の実装の仕方が結構違うことに起因してるっぽい。


違いは山のようにあるのだが、下記はその違いの一例。


WAS7 HashMap

public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>,
        Cloneable, Serializable {
 
//色々省略・・・・・
    // MapEntryというクラスを継承。MapEntryはインナークラスじゃない。
    static class Entry<K, V> extends MapEntry<K, V> {


WAS6 HashMap

public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable
{

//色々省略・・・・・
  // Mapインターフェースのインナークラス
  //(インナーインターフェース?)を使用。
  // SUNのクラスもこんな感じ
    static class Entry<K,V> implements Map.Entry<K,V> {


結構、バージョン、ベンダーによって変わるもんだよな〜と思いました。