-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);
}
}
在這種方法中,例如,我想擺脫模式的參數,並做兩種方法來代替。事情只是變化是內在的條件和邏輯,但其餘的都是相同的。在這種情況下如何避免或最小化代碼重複?
那麼最簡單的方法是使這種方法'private',然後做出不使用'mode'兩個新的'public'方法。讓這兩個方法中的每一個用相應的'mode'調用這個方法。不過,我不確定這是否符合您的要求。 – Zircon
請發表一個最簡單的例子,我幾乎看不懂代碼 –
您可以傳遞一個lambda來定義要執行的操作。 –