Задать вопрос
@Koshkasobaka

Почему появляется InvocationTargetException?

Здравствуйте, у меня есть класс SudokuGenerator, в конструктор которому среди прочего я передаю экземпляр класса SudokuStorage. В методе fillStorage() я создаю экземпляр Sudoku и передаю его в метод sudokuStorage.add(Sudoku), чтобы тот положил его в Mapy. Но дело в том, что любое использование storage в методе add() вызывает InvocationTargetException. Без storage все работает.. что я делаю не так?
public class SudokuGenerator {

    private BoardFactory boardFactory;
    private CellHider cellHider;
    private Sudokustorage sudokuStorage;
// тут геттеры-сеттеры

    public SudokuGenerator(BoardFactory boardFactory, CellHider cellHider, SudokuStorage sudokuStorage) {
        this.boardFactory = boardFactory;
        this.cellHider = cellHider;
        this.sudokuStorage = sudokuStorage;
    }


    public void fillStorage() {
       for (int i = 0; i < 100; i++) {
            Sudoku sudoku = new Sudoku(cellHider.makeBoardWithHiddenCells(boardFactory.generateBoard()));
            sudokuStorage.add(sudoku);
        }
    }
}




public class SudokuStorage {
    private HashMap<Level, ArrayList<Sudoku>> storage;

   public HashMap<Level, ArrayList<Sudoku>> getStorage() {
       return storage;
    }

    public void setStorage() { this.storage = storage; }

    public SudokuStorage() {
        HashMap<Level, ArrayList<Sudoku>> storage = new HashMap<>();
    }


    public void add(Sudoku sudoku) {
        if (storage.containsKey(sudoku.getLevel())) {             
            ArrayList <Sudoku> list = storage.get(sudoku.getLevel());
            list.add(sudoku);
            storage.put(sudoku.getLevel(), list);
        } else {
            ArrayList<Sudoku> list = new ArrayList<>();
            list.add(sudoku);
            storage.put(sudoku.getLevel(), list);
        } 
    

 
    }
}
  • Вопрос задан
  • 741 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Во-первых, вы бы приложили стэк-трейс с ошибкой. Было бы понятно что там у вас происходит.
Во-вторых, в конструкторе у вас что-то непонтяное происходит: зачем-то создается и инициализируется локальная переменная storage. Если вы хотите инициализировать переменную класса, лучше сразу так и писать:
private HashMap<Level, ArrayList<Sudoku>> storage = new HashMap<>();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы