Вам необходимо предоставить загрузчик классов для метода Class.forName
- иначе он будет выглядеть в том же загрузчике классов, что и ваш класс.
Object obj = Class.forName("name", true, loader).newInstance()
.
Но вы не можете просто загрузить класс, а затем использовать его в своем коде, как MyLoadedType
- поскольку здесь java не знает, где искать этот класс, если вы не убедитесь, что ваш код и загруженный коднаходится в том же загрузчике классов - вы можете сделать это, запустив весь код из загрузчика пользовательских классов, который позволяет добавлять новые источники во время выполнения.(URLClassLoader
допускает это, но метод защищен - поэтому вам нужно расширить его и сделать его общедоступным, в java 8 системный загрузчик классов также URLClassLoader
- но это было изменено в java 9).
Но вы можете работать с этим кодом, используя отражения, как я вам показал.