Пытаюсь разобраться с ClassLoaderom. Пока понятно только в общих чертах. Подскажите кто уже прошел эту тему в чем мой косяк?
На первый взгляд кажется что-то не так с именами файлов у меня
Выскакивает java.nio.file.NoSuchFileException: Cat.class
package com.javarush.task.task35.task3507;
import java.io.File;
import java.lang.reflect.Constructor;
import java.util.HashSet;
import java.util.Set;
/*
ClassLoader - что это такое?
*/
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) {
MyClassLoader myClassLoader = new MyClassLoader(pathToAnimals);
Set<Animal> set = new HashSet<>();
File[] files = new File(pathToAnimals).listFiles();
for (File f : files) {
try {
Class clazz = myClassLoader.loadClass(f.getName());
if (Animal.class.isAssignableFrom(clazz)) {
Constructor constructor = clazz.getConstructor();
set.add((Animal)clazz.newInstance());
}
} catch (ClassNotFoundException | NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (InstantiationException e) {
}
}
return set;
}
}