Примером этого является использование boost :: mpl :: identity <T> в c ++ для различения на основе типа, упрощения выбора имен функций и разрешения общей реализации.

я есть FinancialRequests и CommisionTransactions в моем домене. Если у меня есть список запросов на финансирование, каждый запрос на финансирование может содержать несколько транзакций CommisionTransaction, которые необходимо вернуть обратно. Не волнуйтесь, как именно это делается.

Класс ниже (в самом низу) заставляет меня чувствовать себя нечетко и тепло, так как он лаконичен и прекрасно использует существующий код. Одна проблема Типа стирания.

public void clawBack(Collection<FinanceRequest> financeRequestList)  
public void clawBack(Collection<CommissionTrns> commissionTrnsList)

Они оба имеют одинаковую подпись после стирания, т.е.

Collection<FinanceRequest> --> Collection<Object>  
Collection<CommissionTrns> --> Collection<Object>  

Так затмение жалуется, что:
Метод clawBack (Collection) имеет то же самое стирание clawBack (Collection), что и другой метод в типе CommissionFacade.

Любые предложения реструктурировать это так, чтобы это все еще было элегантное решение, которое делает хорошее повторное использование кода?

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);
        }
    }

}

Ответы на вопрос(2)

Ваш ответ на вопрос