フィールドとしていくつかの配列を持つオブジェクトがあります。クラスはおおよそ次のようになります。
public class Helper {
InsuranceInvoices[] insuranceInvoices;
InsuranceCollectiveInvoices[] insuranceCollectiveInvoices
BankInvoices[] bankInvoices;
BankCollectiveInvoices[] bankCollectiveInvoices;
}
すべての請求書タイプには、相互マーカー インターフェイスInvoicesがあります。
請求書に対して別のメソッドを呼び出すには、すべての請求書を取得する必要があります。
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-loop 内のコードの繰り返しは、私を悩ませているものです。4 つの異なる配列内のすべての請求書オブジェクトに対してまったく同じことを行う必要があります。したがって、4 つの for-each ループがコードを不必要に肥大化させます。
一般的な (プライベート) メソッドを作成する方法はありますか? 1つのアイデアは次のとおりです。
private void generalMethod(Invoice[] invoiceArray){
// ...
}
しかし、クラスInvoiceはメソッドgetCusomterId()を認識していないため、これには 4 つの instanceof チェックが必要になります。したがって、私は何も得られません。メソッドにはまだ繰り返しが含まれます。
この問題を一般化するためのあらゆる可能な解決策に感謝します!