Если name
- двоичное имя класса, то имя файла ресурса обычно будет:
separator + name.replaceAll("\\.", separator) + ".class"
. двоичное имя класса является значением, используемым в файлах байт-кодаи возвращается Class.getName()
.
Обратите внимание, что разделитель имени ресурса не обязательно совпадает с File.separator
.Например, если загрузчик классов загружается из файла JAR, то разделитель определяется API файла JAR, а не соглашениями о файловой системе.
При условии, что вы используете двоичное имя для вложенных / анонимных классов, этовсе должно работать.Однако отображение полностью определенных имен классов на имена двоичных классов зависит от компилятора, и их нелегко воспроизвести автоматически.(Вам нужно будет воспроизвести схему, которую компилятор использует для выделения компонентов имен $n
, и для этого потребуется доступ к исходному коду.) Поэтому заставить загрузчик классов понять полностью определенные имена будет сложно.Но это нормально, потому что обычные загрузчики классов не ...
Наконец, обратите внимание, что я сказал "условно".Теоретически, вы можете реализовать любую схему именования файлов классов, которая вам нравится, при условии, что вы сможете понять, как последовательно выполнять сопоставление.