У меня есть классы для обработки ввода примитивного массива: CharArrayExtractor для char [], ByteArrayExtractor для byte [], IntegerArrayExtractor для int [ ], ...
public void CharArrayExtractor {
public List<Record> extract(char[] source) {
List<Record> records = new ArrayList<Record>();
int recordStartFlagPos = -1;
int recordEndFlagPos = -1;
for (int i = 0; i < source.length; i++) {
if (source[i] == RECORD_START_FLAG) {
recordStartFlagPos = i;
} else if (source[i] == RECORD_END_FLAG) {
recordEndFlagPos = i;
}
if (recordStartFlagPos != -1 && recordEndFlagPos != -1) {
Record newRecord = makeRecord(source, recordStartFlagPos,
recordEndFlagPos);
records.add(newRecord);
recordStartFlagPos = -1;
recordEngFlagPos = -1;
}
}
}
}
public void ByteArrayExtractor {
public List<Record> extract(byte[] source) {
// filter and extract data from the array.
}
}
public void IntegerArrayExtractor {
public List<Record> extract(int[] source) {
// filter and extract data from the array.
}
}
Проблема здесь в том, что алгоритм извлечения данных тот же, только типы ввода разные. Каждый раз, когда алгоритм меняется, мне приходится менять все классы экстракторов.
Есть ли способ сделать классы экстракторов более «универсальными»?
С уважением.
РЕДАКТИРОВАТЬ : Кажется, что каждое предложение до сих пор стоит использовать автобоксирование для архивирования родовых. Но количество элементов в массиве часто велико, поэтому я избегаю использования автобокса.
Я добавил более конкретную реализацию того, как извлекаются данные. Надеюсь, это что-то прояснит.