我有几个接口支持我们对实体的后期处理:
WorkFlowProcessor
public interface WorkFlowProcessor {
void PostProcess(List<WorkFlowStrategy> strategies);
}
WorkFlowAction
public class WorkFlowAction implements WorkFlowProcessor{
...
...
public void PostProcess(List<WorkFlowStrategy> strategies){
for(WorkFlowStrategy strategy : strategies){
strategy.process(this)
}
}
}
WorkFlowStrategy
public interface WorkFlowStrategy {
void process(WorkFlowProcessor itemToProcess);
}
TicketWorkFlowStrategy
public class TicketWorkFlowStrategy implements WorkFlowStrategy {
...
...
@Overried
public void process(WorkFlowAction action){ //must override or implement a supertype method
// do a lot of processing
}
}
我正在试图找出为什么我无法使用WorkFlowAction
类进行编译。通常情况下这很好。关于如何让它正确运行的任何想法?
答案 0 :(得分:0)
那是因为你必须使用与界面中的方法相同的签名来声明它:
<T extends WorkFlowProcessor> void process(T itemToProcess)
在接口中声明这样的方法不意味着您可以专门针对更具体的参数实现它。此方法必须接受任何 WorkflowProcessor
。
由于这个事实,这里的类型变量非常无用:你也可以在接口中声明它,这样也可以实现它:
void process(WorkflowProcessor itemToProcess);
除非您执行以下一项或多项操作,否则方法级类型变量实际上并不有用:
如果您想为process
的特定子类专门化WorkflowProcessor
方法,则必须将其放在interface
上:
public interface WorkFlowStrategy<T extends WorkFlowProcessor> {
void process(T itemToProcess);
}
然后:
public class TicketWorkFlowStrategy implements WorkFlowStrategy<WorkflowAction> {
@Override
public void process(WorkFlowAction action){
// ...
}
}
答案 1 :(得分:-1)
process
接口中定义的WorkFlowStrategy
方法的含义是,实现应该能够接受任何WorkFlowProcessor
作为方法的参数。您添加到此方法的通用定义不会对此进行任何更改。
在您的情况下,通用定义可能属于接口级别,而不是方法级别。然后,您可以明确说明可以支持哪些类型。