我的域中有FinanceRequests和CommisionTransactions。如果我有一个FinanceRequests列表,则每个FinanceRequest可能包含多个需要撤回的CommisionTransactions。不用担心这是怎么做到的。
下面的类(非常底层)使我感到模糊不清,因为它简洁,可以很好地重用现有代码。一个问题类型擦除。
public void clawBack(Collection<FinanceRequest> financeRequestList) public void clawBack(Collection<CommissionTrns> commissionTrnsList)
它们在擦除后具有相同的签名,即:
Collection<FinanceRequest> --> Collection<Object> Collection<CommissionTrns> --> Collection<Object>
因此,eclipse抱怨: 方法clawBack(Collection)具有与类型CommissionFacade中的另一个方法相同的擦除clawBack(Collection)。
有什么建议可以对其进行重组,使其仍然是可以很好地重用代码的优雅解决方案?
public class CommissionFacade { /********FINANCE REQUESTS****************/ public void clawBack(FinanceRequest financeRequest) { Collection<CommissionTrns> commTrnsList = financeRequest.getCommissionTrnsList(); this.clawBack(commTrnsList); } public void clawBack(Collection<FinanceRequest> financeRequestList) { for(FinanceRequest finReq : financeRequestList) { this.clawBack(finReq); } } /********COMMISSION TRANSACTIOS****************/ public void clawBack(CommissionTrns commissionTrns) { //Do clawback for single CommissionTrns } public void clawBack(Collection<CommissionTrns> commissionTrnsList) { for(CommissionTrns commTrn : commissionTrnsList) { this.clawBack(commTrn); } } }
重命名方法,或使用多态性:使用接口,然后将clawback代码放入对象本身,或使用两次分派(取决于您的设计范例和口味)。
使用对象中的代码将是:
public interface Clawbackable{ void clawBack() } public class CommissionFacade { public <T extends Clawbackable> void clawBack(Collection<T> objects) { for(T object: objects) { object.clawBack(); } } } public class CommissionTrns implements Clawbackable { public void clawback(){ // do clawback for commissions } } public class FinanceRequest implements Clawbackable { public void clawBack(){ // do clwaback for FinanceRequest } }
我更喜欢这种方法,因为我相信您的域应该包含您的逻辑;但我并不完全了解您的确切意愿,因此请您自行决定。
使用双重调度,您可以将“ ClawbackHandler”传递给clawback方法,并在处理程序上根据类型调用适当的方法。