Сравнение 2 перечислений в java

#java #enums

Вопрос:

У меня под рукой есть рефакторинг кода, и я вижу несколько методов, которые берут различные объекты перечисления, сравнивают их и выполняют некоторую логику. Большинство из этих методов своего рода идентичны по своей природе, за исключением некоторых незначительных настроек. Например

   private void method1(EnumType1 current,EnumType1 desired) {
     if (current==desired) {
        //perform some logic
     }
   }
    
  private void method2(EnumType2 current,EnumType2 desired) {
     if (current==desired) {
        //perform some logic
     }
  }
 

фрагмент кода внутри (выполнение некоторой логики может быть заменено шаблоном шаблона, поскольку существует определенная логика, основанная на определенном типе перечисления). Мне интересно, могу ли я создать новый метод для замены вышеперечисленных 2 методов следующим кодом

 private void method(Object current,Object desired) {
 if(current==desired) {
   //perform some logic
  }
}
 

Я хочу знать, правильно ли работает логика»==», когда я использую этот метод для разных типов перечислений (в моем вопросе я дал ссылку на 2 разных типа перечислений — Enum1 и Enum2), например, скажем, 5 разных типов перечислений. Я протестировал эту логику с 3-4 различными классами перечислений с несколькими значениями в ней и обнаружил, что она работает нормально, но также хотел проверить на этом форуме (пока я продолжаю читать больше о перечислениях).

Если вам нужны какие-либо другие подробности по моему вопросу, пожалуйста, дайте мне знать.

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

1. Почему бы вам просто не перегрузить свою функцию для разных видов перечислений? Это также сделает его более типобезопасным.

Ответ №1:

Это похоже на случай универсального метода.

 private <E extends Enum<E>> void myMethod(E current, E desired) {
     if (current == desired) {
          ....
     }
}
 

Параметр type E используется для гарантии того, что вы можете передавать этому методу только типы перечислений и только два одного типа, в отличие от двух несвязанных перечислений.

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

1. Привет, Давуд, я также наткнулся на определенный дополнительный сценарий, в котором методы принимают пользовательские объекты (например, строку). Я подумываю о повторном использовании того же метода, что и предложенный вами, с помощью Object. Я сделаю некоторые проверки сегодня, но подумал о том, чтобы спросить, хорошо ли звучит это решение?