簡體   English   中英

如何在java中以通用方式編寫此方法

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

目前,我為五個不同的類實現了這個方法來為五個不同的文本文件配置 FlatFileReader 並加載到數據庫表中。

我想知道有沒有辦法在公共地方實現這個方法,這樣我的每個文件都會調用這個方法來配置我的閱讀器來讀取它們對應的文件..

每個文件都會發送不同的實體類來加載它們的文件。 比如主實體、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);
}

給方法添加泛型

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);
}

如果你想只對列出的實體使用,創建一個由所有具體實體( 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