Различные типы
Перечисление в Java - это класс , хотя и немного особенный вид класса. Класс определяет тип .
Если не связаны наследованием или интерфейсом , разные типы нельзя сравнивать на равенство. String
не может быть равно LocalDate
, что не может быть равно DataSource
.
Аналогично, объект enum UserType
не может быть равен объекту enum UserDetails
. Яблоки апельсинам Не равны по определению. Итак, ваш вопрос технически бессмысленен.
Тот факт, что некоторые классы перечислений имеют общие имена для некоторых из своих констант, не имеет значения, это просто совпадение, что ваши два перечисления имеют общие имена USER
или EMPLOYER
. Перечисление Month
в комплекте с Java определяет константу с именем APRIL
. Я мог бы определить другое перечисление с объектом, также названным APRIL
. Но это не делает их равными.
Ответ на этот вопрос предполагает, что у вас есть проблема с вашим дизайном. Возможно, вам стоит опубликовать еще один вопрос по этой проблеме дизайна, если она уже решена в Stack Overflow. Как прокомментировал Каяман , ваш вопрос выглядит как проблема XY .
Другие ответы, предлагающие вам:
- Сравните строки имена констант перечисления.
- Сравните порядковое положение констант в определении перечисления.
… ошибочно. Эти подходы нарушают цель перечислений в Java, которая заключается в обеспечении типобезопасной идентичности определенных значений, известных во время компиляции .
- Если вы сравниваете имена констант, тогда вы могли бы использовать простые
String
объекты, а не перечисления. - Если вы сравниваете порядковые числа , тогда вы можете использовать простые целые числа, а не перечисления.
Оба случая - fr agile, что приводит к сбоям во время выполнения, если вы вносите изменения в одно перечисление без сопоставления с другим. И в обоих случаях вы потеряли полезность перечисления, преобразовав перечисление в запутанный уровень косвенного обращения к строке или int
.