name
は、クラスのバイナリ名である場合には、リソース・ファイル名は、従来のようになります。
separator + name.replaceAll("\\.", separator) + ".class"
クラスのbinary nameは、バイトコードファイルで使用される値であり、Class.getName()
によって返されました。
リソース名の区切り文字は、必ずしもFile.separator
と同じである必要はありません。たとえば、クラスローダーがJARファイルからロードしている場合、ファイルシステムの規則ではなく、JARファイルAPIによって区切りが定義されます。
ネスト/匿名クラスのバイナリ名を使用する場合は、これがすべて動作するはずです。ただし、完全修飾クラス名のバイナリクラス名へのマッピングはコンパイラ固有であり、自動的に再現するのは容易ではありません。 (コンパイラが$n
名前コンポーネントを割り当てるために使用するスキームを再現する必要があり、ソースコードにアクセスする必要があります)。クラスローダーに完全修飾名を理解させるのは難しいでしょう。しかし、それは問題ありません。通常のクラスローダーはそうではないからです。
最後に、私は「従来通り」と言いました。理論的には、マッピングを一貫して行う方法を理解できる限り、クラスファイルの命名規則を実装することができます。
リソースは常に '/'で区切られたパス名を持ちます。 (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.htmlを参照) – dacwe