Почему Exception
классы (например, RuntimeException) не реализуют equals()
метод?Почему классы исключений в Java НЕ реализуют метод equals?
Например, output для этого кода false
:
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
final RuntimeException e1 = new RuntimeException("e");
final RuntimeException e2 = new RuntimeException("e");
System.out.println(e1.equals(e2));
}
}
Есть ли причина, почему equals()
не реализована? Мне кажется, это было бы очень полезно.
Редактировать: Позвольте мне рассказать о проблеме, так как кажется, что большинство людей считают, что реализация equals()
не будет полезна.
Хотелось бы знать, почему Исключения должны обрабатываться иначе, чем обычные объекты, и их следует сопоставлять только в том случае, если это один и тот же экземпляр. Не хватает ли информации о себе для сравнения с другими объектами. Например, базовый StackTraceElement, который, как я предполагаю, хранит стек вызовов, уже реализует метод equals
.
Есть ли что-то в определении Исключений, которые мешают им реализовать метод equals на основе их атрибутов?
Зачем вам нужно сравнивать 'Exception'? Мне никогда не приходилось сравнивать «Исключение». – rgettman
Если вы хотите сравнить объекты RuntimeException, создайте свой собственный подкласс, который переопределяет 'equals'. – deyur
Эти исключения будут иметь разные трассировки стека, так что вы действительно считаете их равными? –