Как написать этот метод в общем виде в Java
В настоящее время у меня есть этот метод, реализованный для пяти различных классов, чтобы настроить FlatFileReader для пяти различных текстовых файлов и загрузить в таблицу БД.
Я хотел бы знать, есть ли способ реализовать этот метод в общем месте, чтобы каждый мой файл вызывал этот метод для настройки моего считывателя на чтение их соответствующих файлов..
Каждый файл будет отправлять разные классы сущностей для загрузки своего файла. как Primay Entity,ChildEntity1,ChildEntity2,ChildEntity3,ChildEntity4.
private void flatFileItemReaderConfig(FlatFileItemReader<PrimaryEntity> flatFileReader,
String fileName, String incomingHeader)
{
// set delimitter as '|'
DefaultLineMapper<PrimaryEntity> defaultLineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer("|");
delimitedLineTokenizer.setNames(convertHeaderToEntityAttrib(fileName, incomingHeader));
defaultLineMapper.setLineTokenizer(delimitedLineTokenizer);
// convert each record into primaryentity
BeanWrapperFieldSetMapper<PrimaryEntity> beanWrapperFieldSetMapper =
new BeanWrapperFieldSetMapper<>();
beanWrapperFieldSetMapper.setTargetType(PrimaryEntity.class);
beanWrapperFieldSetMapper.setCustomEditors(getCustomFormatters());
defaultLineMapper.setFieldSetMapper(beanWrapperFieldSetMapper);
flatFileReader.setLineMapper(defaultLineMapper);
}
1 ответ
Добавьте дженерики к методу
private <T> void flatFileItemReaderConfig(FlatFileItemReader<T> flatFileReader, String fileName, String incomingHeader, Class<T> clazz) {
// set delimitter as '|'
DefaultLineMapper<T> defaultLineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer("|");
delimitedLineTokenizer.setNames(convertHeaderToEntityAttrib(fileName, incomingHeader));
defaultLineMapper.setLineTokenizer(delimitedLineTokenizer);
// convert each record into primaryentity
BeanWrapperFieldSetMapper<T> beanWrapperFieldSetMapper = new BeanWrapperFieldSetMapper<>();
beanWrapperFieldSetMapper.setTargetType(clazz);
beanWrapperFieldSetMapper.setCustomEditors(getCustomFormatters());
defaultLineMapper.setFieldSetMapper(beanWrapperFieldSetMapper);
flatFileReader.setLineMapper(defaultLineMapper);
}
Если вы хотите ограничить использование только перечисленными объектами, создайте общий интерфейсный объект, который реализуется всеми конкретными объектами (PrimaryEntity,ChildEntity1,ChildEntity2,ChildEntity3,ChildEntity4) и измените подпись на
private <T extends Entity> void flatFileItemReaderConfig(...)