«Общее» решение для примитивного массива?

У меня есть классы для обработки ввода примитивного массива: 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.
    }
}

Проблема здесь в том, что алгоритм извлечения данных тот же, только типы ввода разные. Каждый раз, когда алгоритм меняется, мне приходится менять все классы экстракторов.

Есть ли способ сделать классы экстракторов более «универсальными»?

С уважением.

РЕДАКТИРОВАТЬ : Кажется, что каждое предложение до сих пор стоит использовать автобоксирование для архивирования родовых. Но количество элементов в массиве часто велико, поэтому я избегаю использования автобокса.

Я добавил более конкретную реализацию того, как извлекаются данные. Надеюсь, это что-то прояснит.

9
задан Genzer 12 August 2011 в 15:24
поделиться