Вам нужно переопределить, как сравниваются исключения, чтобы он распознавал дубликаты так, как вы хотите.Вы не можете сделать это для HashSet, но вы можете сделать это для TreeSet, например
Set<Exception> exceptions = new TreeSet<>(Comparator.comparing(Object::toString));
В этом примере сравнивается toString
, который является типом исключения и сообщением в большинстве случаев.
Если вына самом деле вы хотите использовать HashSet, вам нужно обернуть Exception в класс, который реализует hashCode и соответствует желаемому.
Если все, что вас волнует, это тип и сообщение, вы можете хранить только toString каждого исключения
final Set<String> exceptions = new HashSet<>();
public void addException(Exception e) {
exceptions.add(e.toString());
}