Одним из способов решения этой проблемы было бы определение пользовательских типов списков, например:
class CustomerList extends ArrayList<Customer> {
...
}
class ApplicantList extends ArrayList<Applicant> {
...
}
Тогда допустима следующая перегрузка:
public void processCustomerNumbers(CustomerList custList)
public void processCustomerNumbers(ApplicantList appList)
Однако я не думаю, что это было бы хорошей идеей. Для начала он встроил определенные классы реализации в API вашего приложения.
Лучшим подходом является определение общего интерфейса для Заказчика и Заявителя, который позволяет обрабатывать их одним processCustomerNumbers
методом. (Как подробно описано в других ответах.)