Реализуй логику метода getAllAnimals. Аргумент метода pathToAnimals — это абсолютный путь к директории, в которой хранятся скомпилированные классы. Путь не обязательно содержит / в конце. НЕ все классы наследуются от интерфейса Animal. НЕ все классы имеют публичный конструктор без параметров. Только для классов, которые наследуются от Animal и имеют публичный конструктор без параметров, — создать по одному объекту. Добавить созданные объекты в результирующий сет и вернуть. Метод main не участвует в тестировании. Требования: 1. Размер множества возвращаемого методом getAllAnimals должен быть равен количеству классов поддерживающих интерфейс Animal (среди классов расположенных в директории переданной в качестве параметра). 2. В множестве возвращаемом методом getAllAnimals должны присутствовать все классы поддерживающие интерфейс Animal и имеющие публичный конструктор без параметров (среди классов расположенных в директории переданной в качестве параметра). 3. В множестве возвращаемом методом getAllAnimals НЕ должен присутствовать ни один класс не поддерживающий интерфейс Animal (среди классов расположенных в директории переданной в качестве параметра). 4. Метод getAllAnimals должен быть статическим.
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> set = new HashSet<>();

        File[] list = new File(pathToAnimals).listFiles();
        for (File file : list) { //в этой строке NullPointerException, потому что в предыдущей строке список не сформировался
//------------------------------
Всё что ниже не имеет значения.
Код принят, но он кидает исключение. Я смотрел другие вариант, это место плюс минус одинаковое, что может быть в настройках системы, что такое происходит?