首页 > 解决方案 > Java调用同一父类的子构造函数

问题描述

有什么办法可以简化这个吗?

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中是否有任何方法可以传递子类并使用它的构造函数?如果它们共享相同的构造函数结构?

IE。


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

像这样的东西?

标签: javaoop

解决方案


您可以使用方法引用和功能接口。使用一个方法创建一个接口(可选用 注释@FunctionalInterface),该方法采用学生 ID 和姓名,并返回 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();
}

推荐阅读