我正在处理的应用程序由配置文件和步骤组成。每个 Profile 由多个步骤组成,有 4 种步骤:
- Sequential :完成此步骤后,按顺序转到下一步。
- 跳转:此步完成后,跳转到ID步。
- Evaluated :此步骤完成后,根据某种方法的结果确定下一步ID。
- Terminal:这一步是最后一步。
我的Step
接口(interface)有一个名为public abstract Step getNextStep()
的抽象方法。每个步骤类型都根据需要实现此方法。
问题是 EvaluatedStep 需要一个参数,我们称它为 Parameter p
,而其他步骤类型都不需要任何参数。
我通过将接口(interface)中的方法 header 更改为 public abstract Step getNextStep(Parameter p);
来解决这个问题,但我知道这不是一个好的解决方案。 执行此操作的更好方法是什么?
注意:
- 我无法将
Parameter p
传递给 EvaluationStep 构造函数,因为该参数仅在需要调用getNextStep()
时可用。 Parameter p
将来可能是不同参数的集合,因此解决此问题的方法必须灵活。换句话说,现在我只需要将Parameter p
传递给getNextStep()
但将来我可能需要传递一堆不同的参数getNextStep(Parameter p,参数 a,Something s)
。 我怎样才能避免这种情况?
最佳答案
一种方法是在签名上使用可变参数,如下所示:
pubic abstract Step getNextStep(Object... parameters)
然后可以通过以下任何一种方式调用它:
seq.getNextStep();
eval.getNextStep(p);
future.getNextStep(p,a,s);
所有的都会匹配界面。在实现内部,如果需要,可以将它们作为数组成员引用:
public Step getNextStep(Object... parameters){
if ( parameters.length > 0 && parameters[0] instanceof Parameter ){
Parameter p = (Parameter) parameters[0];
}
}
关于java - 如何将参数传递给接口(interface)的一个实现者而不是其他实现者(不在构造函数中传递它)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24762888/