クラスローダ嫌い

配列型をロードするクラスローダは、そのコンポーネントタイプと同じらしい。
仮にintをロードするクラスローダがあったとして、それをCpと名づけると、

  • int[].getSuperClass() -> Object より、java.lang.Objectをロードできる。
  • java.lang.Object.getClass: Class より、java.lang.Classをロードできる。
  • java.lang.Class.getMethod: Method より、java.lang.reflect.Methodをロードできる。
  • java.lang.reflect.Method.〜 より、sun.reflect.〜をロードできる。

つまり、Cpはsunパッケージの中まである程度ロード出来なければならない。しかも通常はローダの親子関係で祖先にいるようなローダが。

逆転の発想でCpを祖先にしないとどうなるか。HogeをロードできるローダChを親にして、Cp->Chという連鎖を作成する。

すると、Hoge[]をロードするローダがChで、

  • Hoge[].getSuperClass() -> Object より、java.lang.Objectをロードできる。

この時点で失敗。親にCpがいないし。

Cp->Ch->Cp とするとどうなるか。ただし、2つのCpは違うインスタンスなので、Cp1->Ch->Cp2 と表記した方がよさそう。これだと、規約により親を優先してクラスをロードするので、結局全ての型はCp2になる。

…クラスローダの考えは採用しない方向で。