Java Вызов дочерних конструкторов того же родительского класса - PullRequest
0 голосов
/ 06 марта 2019

Любой способ упростить это?

switch (student.getYear())
   case 1:
      new FirstYear(student.getId(), student.getName());
      break;
   case 2:
      new SecondYear(student.getId(), student.getName());
      break;
   case 3:
      new ThirdYear(student.getId(), student.getName());
      break;
   default:
      break;

где у классов FirstYear, SecondYear, ThirdYear общий родительский класс?

Есть ли в java средства для передачи дочернего класса и использования его конструктора? если они имеют одинаковую структуру конструктора?

т.


public static void registerStudent(final Class yearClazz) {
     new yearClazz(student.getId(), student.getName()).save(); //???
}

как то так?

1 Ответ

1 голос
/ 06 марта 2019

Вы можете использовать метод ссылки и функциональные интерфейсы. Создайте интерфейс (опционально помеченный @FunctionalInterface) с помощью одного метода, который принимает идентификатор и имя учащегося и возвращает того, кто является родителем FirstYear / SecondYear / ThirdYear. Предположим, вы называете этот интерфейс YearFactory и метод makeYear. Тогда FirstYear::new, SecondYear::new и ThirdYear::new будут объектами, реализующими этот интерфейс.

switch (student.getYear())
   case 1:
      fac = FirstYear::new;
      break;
   case 2:
      fac = SecondYear::new;
      break;
   case 3:
      fac = ThirdYear::new;
      break;
   default:
      break;
public static void registerStudent(final YearFactory fac) {
     fac.makeYear(student.getId(), student.getName()).save();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...