我有一个如下所示的类和接口:
interface Employee {...}
class Developer implements Employee {...}
然后我有实现入职流程中的步骤的类:
interface OnboardingStep<T extends Employee> {
void perform(T newEmployee);
}
class GeneralOnboardingStep implements OnboardingStep<Employee> {
GeneralOnboardingStep() {}
@Override
void perform(Employee newEmployee) {...}
}
class DeveloperOnboardingStep implements OnboardingStep<Developer> {
DeveloperOnboardingStep() {}
@Override
void perform(Developer newDeveloper) {...}
}
完整的入职流程包括一般入职加上针对开发人员的特定入职.
所以我想做的是:
abstract class OnboardingProcess<T extends Employee> {
// This is where I need help, see below
private final List<OnboardingStep<T>> onboardingSteps;
protected OnboardingProcess(List<OnboardingStep<T>> onboardingSteps) {
this.onboardingSteps = onboardingSteps;
}
public void perform(T newEmployee) {
for (var onboardingStep: onboardingSteps) {
onboardingStep.perform(newEmployee);
}
}
class DeveloperOnboardingProcess extends OnboardingProcess<Developer> {
DeveloperOnboardingProcess() {
// This does not work
super(List.of(
new GeneralOnboardingStep(),
new DeveloperOnboardingStep()
));
}
}
这不起作用,因为DeveloperOnboardingProcess
中的列表可能只包含OnboardingStep<Developer>
,而不是OnboardingStep<Employee>
.
但它应该是可行的,因为Developer
实现了Employee
.(我说的"应该奏效"的意思是:"我希望它奏效了").
我如何调整抽象类中的列表类型,使其也接受接口的加载步骤?