Вы не можете.Несмотря на одинаковое имя, Animal.die()
и Plant.die()
не связаны между собой функциями.Нет общего способа вызвать их.
Название «die» предполагает, что они должны быть экземплярами, а не статическими методами.Животный экземпляр может умереть, да?Не класс животных?Если вы сделаете их экземплярами методов, то оба перечисления могут реализовать общий интерфейс:
interface Mortal {
void die();
}
enum Animal implements Mortal { ... }
enum Plant implements Mortal { ... }
Или, если вы действительно намерены сделать их статичными, вы можете заменить операторы if
на основанные на карте.уважать.Это все еще не конструкция во время компиляции, но избегает приведения.
Map<Class<?>, Runnable> killers = new HashMap<>();
killers.add(Plant .class, Plant ::die);
killers.add(Animal.class, Animal::die);
...
killers.get(_class).run();