-2
Привет, я хочу знать, есть ли какой-либо шаблон, чтобы избежать повторения кода, и ifs в случаях, подобных этому для Java.Есть ли способ или шаблон, чтобы избежать дублирования кода Java
public void updateSequence(DN dn, long seq, long countDescriptorId, int mode) {
Collection<ResyncNECountSequenceDescriptor> sequencesCollection =
sequences.get(dn);
ResyncNECountSequenceDescriptor neDescSeq =
new ResyncNECountSequenceDescriptor(countDescriptorId, seq);
if (sequencesCollection != null && sequencesCollection.size() > 0) {
boolean foundSeq = false;
for (ResyncNECountSequenceDescriptor sequence : sequencesCollection) {
if (sequence.getCountDescriptorId() == countDescriptorId) {
if (mode == LAST_CREATED_DATFILE_SEQUENCE) {
sequence.setLastCreatedDatfileSequence(seq);
} else {
if (seq > sequence.getLastCreatedDatfileSequence()) {
seq = 0;
}
sequence.setNextDatfileToProcessSequence(seq);
}
foundSeq = true;
}
}
if (!foundSeq) {
sequencesCollection.add(neDescSeq);
}
} else {
Collection<ResyncNECountSequenceDescriptor> col = new
ArrayList<ResyncNECountSequenceDescriptor>();
col.add(neDescSeq);
sequences.putIfAbsent(dn, col);
}
}
В этом методе, например, я хочу избавиться от параметра mode и вместо этого выполнить два метода. Дело только в том, что изменения - это внутреннее условие и логика, но все остальное одинаково. Как избежать или свести к минимуму дублирование кода в этом случае?
Ну самый простой способ был бы сделать этот метод 'private', а затем сделать два новых' методы public', которые не используют 'mode'. Попросите каждый из этих двух методов использовать этот режим с правильным «режимом». Однако я не уверен, что это удовлетворяет вашим требованиям. – Zircon
Пожалуйста, напишите минимальный пример, я едва могу прочитать код –
Вы можете передать лямбда, чтобы определить, какую операцию выполнить. –