Загрузчик классов не может заменить класс, который уже был загружен.loadClass
вернет ссылку на существующий экземпляр Class
.
Вам придется создать экземпляр нового загрузчика классов и использовать его для загрузки нового класса.И затем, если вы хотите «заменить» класс, вам придется выбросить этот загрузчик классов и создать еще один новый.
В ответ на ваши комментарии: сделайте что-то вроде
ClassLoader cl = new UrlClassLoader(new URL[]{pathToClassAsUrl});
Class<?> compiledClass = cl.loadClass(stringClass);
Этот загрузчик классов будет использовать «родительский класс по умолчанию для делегирования делегирования», и вы должны позаботиться о том, чтобы класс (определяемый как полное имя класса) не был загружен и не мог быть загружен этим родительским загрузчиком классов,Таким образом, pathToClassAsUrl не должен быть в пути к классам!