Java как создать пользовательское исключение, чтобы ограничить размер хэш-карты

#java #exception

#java #исключение

Вопрос:

У меня есть метод, который вставляет новые элементы в a HashMap , я хочу ограничить размер с HashMap помощью throw an exception , когда размер хэш-карты больше определенного значения, скажем 100 , ниже приведена моя реализация:

 public void addToHashMap(String id, Object value) throws HashMapOutOfBoundException{
    hashMap.put(id,value);    
}

private class HashMapOutOfBoundException extends Exception{
    //what should I do inside this class?
}
 

Ответ №1:

Почему не простой:

 public void addToHashMap(String id, Object value) {
    if (hashMap.size() 1 > MAX_SIZE)
      throw new HashMapOutOfBoundException();
    hashMap.put(id,value);    
}
 

с помощью

 public class HashMapOutOfBoundException extends RuntimeException {}
 

Из javadoc:

RuntimeException и его подклассы являются непроверенными исключениями. Непроверенные исключения не нужно объявлять в предложении throws метода или конструктора, если они могут быть вызваны выполнением метода или конструктора и распространяться за пределы метода или границы конструктора.

Комментарии:

1. Итак, внутри класса HashMapOutOfBoundException я ничего не делаю? Я хочу ограничить размер HashMap внутри класса HashMapOutOfBoundException .

2. При использовании RuntimeException мне не нужно создавать класс HashMapOutOfBoundException, а просто создать новое исключение RuntimeException, верно?

3. @user3491420 Вы могли бы использовать базовое исключение RuntimeException, но это не рекомендуется. Как вы собираетесь обрабатывать конкретный случай исключения, если генерируемое исключение не является конкретным? @Nizil условие в вашем операторе if предполагает, что ограничение размера уже нарушено, я бы пошел с (hashMap.size() 1) > MAX_SIZE

4. @user3491420 Правильно! Но трассировка стека ошибок будет менее понятной, а исключение будет менее «уловимым» 🙂 Я не понимаю, что вы подразумеваете под «ограничением размера HashMap внутри HashMapOutOfBoundException»

5. @DanTemple Спасибо 🙂