我的域中有FinanceRequests和CommisionTransactions.
如果我有一个FinanceRequests的列表,每个FinanceRequest可能包含需要被抓回的多个CommisionTransactions.不要担心这是如何完成的.
如果我有一个FinanceRequests的列表,每个FinanceRequest可能包含需要被抓回的多个CommisionTransactions.不要担心这是如何完成的.
下面的课程(非常低)使我感觉到自己的succint感到所有模糊和温暖,并重用现有的代码很好.一个问题类型擦除.
public void clawBack(Collection<FinanceRequest> financeRequestList) public void clawBack(Collection<CommissionTrns> commissionTrnsList)
他们在擦除后都具有相同的签名,即:
Collection<FinanceRequest> --> Collection<Object> Collection<CommissionTrns> --> Collection<Object>
所以eclipse抱怨说:
方法hookBack(Collection)与CommissionFacade类型中的另一种方法具有相同的擦除爪子(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); } } }
解决方法
重命名方法,或使用多态:使用一个接口,然后将回拨代码放在对象本身中,或者使用双重分派(取决于您的设计范例和品味).
使用对象中的代码:
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 } }
我喜欢这种方法,因为我相信你的域应该包含你的逻辑;但是我并不完全清楚你的确切愿望,所以我会把它留给你.