public class Solution {
    public static void main(String[] args) {
        Set<? extends Animal> allAnimals = getAllAnimals(Solution.class.getProtectionDomain().getCodeSource().getLocation().getPath() + Solution.class.getPackage().getName().replaceAll("[.]", "/") + "/data");
        System.out.println(allAnimals);
    }

    public static Set<? extends Animal> getAllAnimals(String pathToAnimals) {
        Set<Animal> allAnimals = new HashSet<>();
        MyClassLoader classLoader = new MyClassLoader();

        try {
            for (File file : Objects.requireNonNull(new File(pathToAnimals).listFiles())) {
                Class clazz = classLoader.loadClass(file.getAbsolutePath());
                if (Animal.class.isAssignableFrom(clazz) && clazz.getConstructors().length != 0)
                    allAnimals.add((Animal) clazz.newInstance());
            }
        } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
            e.printStackTrace();
        }

        return allAnimals;
    }

    public static class MyClassLoader extends ClassLoader {
        @Override
        public Class<?> loadClass(String name) throws ClassNotFoundException {
            Class clazz = null;
            try {
                byte[] bytes = Files.readAllBytes(Paths.get(name));
                clazz = defineClass(null, bytes, 0, bytes.length);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return clazz;
        }
    }
}
Вот весь код. При выполнении возникает ошибка NoSuchFileException на строке clazz = defineClass(null, bytes, 0, bytes.length); (почти в самом низу). Не понимаю, что не так. Проверял, с путями к скомпилированным классам всё корректно. Конкретно, вот такие пути у меня находит: C:\Java_My_Projects\JavaRushTasks\out\production\4.JavaCollections\com\javarush\task\task35\task3507\data\Cat.class C:\Java_My_Projects\JavaRushTasks\out\production\4.JavaCollections\com\javarush\task\task35\task3507\data\Elephant.class C:\Java_My_Projects\JavaRushTasks\out\production\4.JavaCollections\com\javarush\task\task35\task3507\data\Sheep.class Считываю с файла все байты, передаю их в defineClass и такая вот лажа возникает.