У меня есть объект с несколькими массивами в виде полей. Это класс примерно выглядит следующим образом:Обобщенный метод получения аналогичных атрибутов объекта
public class Helper {
InsuranceInvoices[] insuranceInvoices;
InsuranceCollectiveInvoices[] insuranceCollectiveInvoices
BankInvoices[] bankInvoices;
BankCollectiveInvoices[] bankCollectiveInvoices;
}
Всех типов счетов имеет обоюдный интерфейс маркеров счетов-фактур.
Мне нужно, чтобы все счета-фактуры вызывали на них другой метод.
Helper helperObject = new Helper();
// ...
for (InsuranceInvoices invoice : helperObject.getInsuranceInvoices()) {
Integer customerId = invoice.getCustomerId();
// ...
}
for (BankInvoices invoice : helperObject.getBankInvoices()) {
Integer customerId = invoice.getCustomerId();
// ...
}
// repeat with all array fields
Проблема в том, что все счета-фактуры имеют только общий интерфейс маркера. Метод getCustomerID() не определяется взаимным интерфейсом или классом. Это поведение, которое я не могу изменить из-за данной спецификации.
Повторение кода внутри цикла for-each-это то, что меня беспокоит. Я должен делать то же самое на всех объектах счета в четырех разных массивах. Следовательно, четыре для каждой петли, которые не требуют раздувания кода.
Есть ли способ, которым я могу написать общий (частный) метод? Одна идея была:
private void generalMethod(Invoice[] invoiceArray){
// ...
}
Но для этого потребуется четыре InstanceOf проверки, потому что класс Счет не знает метод getCusomterId(). Поэтому я ничего не выиграю; метод все равно будет содержать повторения.
Я благодарен за все возможные решения, чтобы обобщить эту проблему!
так, классы все реализовать 'Invoice', и все реализовать' getCustomerId', но ' getCustomerId' не находится в интерфейсе 'Invoice'? Вам нужно будет использовать отражение, чтобы получить доступ к методу по имени и вызвать его. На данный момент интерфейс 'Invoice' совершенно бесполезен. – njzk2
«getInsuranceInvoices',' getBankInvoices' ... все четыре возвращают одинаковое количество счетов-фактур? – Rajesh
У меня есть предложение ... применить cluebat к человеку, который сделал интерфейс «Invoice» интерфейсом маркера вместо того, который указывает, какие методы имеют счета-фактуры. – Powerlord