Метод сохранения для каждого Enum - PullRequest
1 голос
/ 20 мая 2019

Я создал Enum.Теперь я хочу сохранить метод для каждого Enum.Эти методы находятся в разных классах.Как я могу сделать это?Я имею в виду что-то вроде этого:

public enum FooEnum {

    A(Person::setAge),
    B(Test::setTest);

    private final Function</* What to enter here */, Object> function;

    private FooEnum(final Function</* ... */, Object> function) {
        this.function = function;
    }

    public Function</* ... */, Object> getFunction() {
        return function;
    } 
}

Очевидно, что это не скомпилируется.«Персона» и «Тест» - лишь некоторые примеры классов.

1 Ответ

2 голосов
/ 20 мая 2019

Вместо Function вы можете использовать Runnable.А поскольку перечисление является статической константой, вам также необходимо определить статические методы:

  public static class Person {
    public static void setAge() {

    }
  }

  public enum FooEnum {

    A(Person::setAge);

    private final Runnable function;

    private FooEnum(Runnable function) {
      this.function = function;
    }

    public Runnable getFunction() {
      return function;
    } 
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...