При компиляции кода происходит ошибка на java, основная ошибка описанна ниже

Основная ошибка при компиляции кода, нужна помощь, как в таком случае правильно построить структуру, чтобы исправить все ошибки.

Variable 'animal' initializer 'null' is redundant -------- (но без NULL переменная "animal" не принимается Java) 'if' statement can be replaced with 'switch' statement ----------(мне loop c if нужен внутри switch) Parameter 'animal' is never used (все-таки не видит название переменной "animal")

public class MainGenerator {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    Animal animal = null;
    List<Animal> animalsList = new ArrayList<>();
    while (true) {
        System.out.println("Введите одну из команд -> ADD, LIST, EXIT: ");
        String userCommand = sc.next().toUpperCase();
        boolean isCommandValid = false;
        for (Command command : Command.values()) {
            if (command.name().equals(userCommand)) {
                isCommandValid = true;
               break;
            }
        }
        if (!isCommandValid) {
            System.out.println("Введена неверная команда");
            continue;
        }
        Command myChose = valueOf(userCommand);
        switch (myChose) {
            case ADD:
                System.out.println("Какое у Вас домашнее животное (Dog, Duck, Cat)? ");
                String animalType = sc.next();
                animal = null;
                if (animalType.equals("cat")) {
                    animal = new Cat();
                } else if (animalType.equals("dog")) {
                    animal = new Dog();
                } else if (animalType.equals("duck")) {
                    animal = new Duck();
                }
                fillAnimal(sc, animal);
                assert animal != null;
                animal.say();                   //NullPointerException??
                animalsList.add(animal);
                break;
            case LIST:
                for (Animal animals : animalsList) {
                    System.out.println(animals);
                }
                break;

            case EXIT:
                System.out.println("До встречи");
                System.exit(0);
            default:
                System.out.println("Неизвестный тип команды");
                throw new IllegalStateException("Unexpected value: " + myChose);
        }
    }
}
private static void fillAnimal(@NotNull Scanner sc, Animal animal) {
    if (!sc.hasNext()) {
        System.out.println("Вы ввели не название животного, повторите ввод данных");
    }
    System.out.println("Введите кличку животного");
    sc.next();
    if (!sc.hasNext()) {
        System.out.println("Вы ввели не слово, повторите ввод данных");
    }
    System.out.println("Введите возраст животного");
    sc.nextInt();
    if (!sc.hasNextInt()) {
        System.out.println("Вы ввели не число, повторите ввод данных");
    }
    System.out.println("Введите вес животного");
    sc.nextInt();
    if (!sc.hasNextInt()) {
        System.out.println("Вы ввели не число, повторите ввод данных");
    }
    System.out.println("Введите цвет шерсти животного");
    sc.next();
    if (!sc.hasNext()) {
        System.out.println("Вы ввели не слово, повторите ввод данных");
    }
}

}


Ответы (0 шт):