Ho un oggetto che ha alcuni array come campi. E 'di classe si presenta più o meno così:Metodo generalizzato per ottenere attributi di oggetto simili
public class Helper {
InsuranceInvoices[] insuranceInvoices;
InsuranceCollectiveInvoices[] insuranceCollectiveInvoices
BankInvoices[] bankInvoices;
BankCollectiveInvoices[] bankCollectiveInvoices;
}
Tutte le tipologie di fattura hanno un reciproco un'interfaccia marcatore fatture.
Ho bisogno di ottenere tutte le fatture per invocare un altro metodo su di esse.
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
Il problema è che tutte le fatture hanno solo l'interfaccia del marcatore in comune. Il metodo getCustomerID() non è definito da un'interfaccia o una classe reciproca. Questo è un comportamento che non posso cambiare a causa di una determinata specifica.
La ripetizione del codice all'interno di for-each-loop è qualcosa che mi infastidisce. Devo fare esattamente la stessa cosa su tutti gli oggetti di fattura nei quattro diversi array. Quindi quattro cicli for-each-loop che inutili gonfiano il codice.
Esiste un modo per scrivere un metodo generale (privato)? Un'idea era:
private void generalMethod(Invoice[] invoiceArray){
// ...
}
Ma questo richiederebbe quattro controlli instanceof perché la classe Invoice non conosce il metodo getCusomterId(). Perciò non guadagnerei nulla; il metodo conterrebbe ancora le ripetizioni.
Sono grato per ogni possibile soluzione per generalizzare questo problema!
modo, le classi tutte implementano 'Invoice', e tutti implementano' getCustomerId', ma ' getCustomerId' non è nell'interfaccia 'Invoice'? Dovrai usare reflection per accedere al metodo per nome e invocarlo. A questo punto, l'interfaccia 'Invoice' è abbastanza inutile. – njzk2
Do 'getInsuranceInvoices',' getBankInvoices' ... tutti e quattro restituiscono lo stesso numero di fatture? – Rajesh
Ho un suggerimento ... applicare un cluebat alla persona che ha fatto dell'interfaccia 'Fattura' un'interfaccia marcatore invece di una che specifica quali metodi hanno le fatture in comune. – Powerlord