简体   繁体   English

如何在java中以通用方式编写此方法

[英]How to write this method in a generic way in java

Currently, I have this method implemented for five different class to configure FlatFileReader for five different text files and load into DB table.目前,我为五个不同的类实现了这个方法来为五个不同的文本文件配置 FlatFileReader 并加载到数据库表中。

I would like to know is there a way to implement this method in a common place So that my each file will call this method to configure my reader to read their corresponding files..我想知道有没有办法在公共地方实现这个方法,这样我的每个文件都会调用这个方法来配置我的阅读器来读取它们对应的文件..

Every file will send different entity class to load their file.每个文件都会发送不同的实体类来加载它们的文件。 like Primary Entity, ChildEntity1, ChildEntity2, ChildEntity3, ChildEntity4.比如主实体、ChildEntity1、ChildEntity2、ChildEntity3、ChildEntity4。

private void flatFileItemReaderConfig(FlatFileItemReader<PrimaryEntity> flatFileReader,
        String fileName, String incomingHeader)
{
    // set delimiter 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);
}

Add generics to the method给方法添加泛型

private <T> void flatFileItemReaderConfig(FlatFileItemReader<T> flatFileReader, String fileName, String incomingHeader, Class<T> clazz) {

    // set delimiter as '|'
    DefaultLineMapper<T> defaultLineMapper = new DefaultLineMapper<>();

    DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer("|");
    delimitedLineTokenizer.setNames(convertHeaderToEntityAttrib(fileName, incomingHeader));
    defaultLineMapper.setLineTokenizer(delimitedLineTokenizer);

    // convert each record into primary entity
    BeanWrapperFieldSetMapper<T> beanWrapperFieldSetMapper = new BeanWrapperFieldSetMapper<>();
    beanWrapperFieldSetMapper.setTargetType(clazz);
    beanWrapperFieldSetMapper.setCustomEditors(getCustomFormatters());
    defaultLineMapper.setFieldSetMapper(beanWrapperFieldSetMapper);
    flatFileReader.setLineMapper(defaultLineMapper);
}

If you want to limit the usage only to the listed entities, create a common interface Entity that is implemented by all concrete entities ( PrimaryEntity, ChildEntity1, ChildEntity2, ChildEntity3, ChildEntity4 ) and change the signature to如果你想只对列出的实体使用,创建一个由所有具体实体( PrimaryEntity, ChildEntity1, ChildEntity2, ChildEntity3, ChildEntity4 )实现的通用接口 Entity 并将签名更改为

private <T extends Entity> void flatFileItemReaderConfig(...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM