クラスローダ嫌い
配列型をロードするクラスローダは、そのコンポーネントタイプと同じらしい。
仮に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で、
この時点で失敗。親にCpがいないし。
Cp->Ch->Cp とするとどうなるか。ただし、2つのCpは違うインスタンスなので、Cp1->Ch->Cp2 と表記した方がよさそう。これだと、規約により親を優先してクラスをロードするので、結局全ての型はCp2になる。
…クラスローダの考えは採用しない方向で。