在Java中,我有一个名为Operation的抽象类,以及三个名为OperationActivation,OperationPayment和OperationSendEmail的子类.
添加自评论:操作*对象是EJB实体Bean,因此我不能在其中包含业务逻辑.
不,我想创建这样的处理器类:
public class ProcessOperationService {
public void processOperation(Operation operation) {
out.println("process Operation");
process(operation);
}
public void process(OperationActivation operationActivation) {
out.println("process Activation");
}
public void process(OperationPayment operationPayment) {
out.println("process Payment");
}
public void process(OperationSendEmail operationSendEmail) {
out.println("process OperationSendEmail");
}
Run Code Online (Sandbox Code Playgroud)
}
处理每个操作需要不同的逻辑,所以我想有三种不同的方法,每个操作一个.
当然这段代码不能编译.我错过了什么或不能这样做吗?
您正在混合重载和多态方法处理.当您基于参数类型重载方法时,即静态多态.应该从编译时知道类型是什么的代码调用这些方法.您可以执行以下操作,但它不是干净的面向对象的代码:
public class ProcessOperationService {
public void processOperation(Operation operation) {
out.println("process Operation");
if (operation instanceof OperationActivation)
process((OperationActivation)operation);
else if (operation instanceof OperationPayment)
process((OperationPayment)operation);
...
}
public void process(OperationActivation operationActivation) {
out.println("process Activation");
}
...
}
Run Code Online (Sandbox Code Playgroud)
通过像Brian Agnew所建议的那样让自动运行时多态性工作,并使进程成为每个Operation子类本身的方法会好得多.