gpt4 book ai didi

java - SpringBatch Step chunk 中的通用方法

转载 作者:行者123 更新时间:2023-12-02 10:42:02 24 4
gpt4 key购买 nike

我实际上正在使用 Spring Batch,并且我一直在问自己一些关于泛型方法的问题。考虑以下代码:

public <I, O> SimpleStepBuilder<I, O> chunk(int chunkSize) {
return new SimpleStepBuilder<I, O>(this).chunk(chunkSize);
}

如果我们进一步检查源代码,我们会遇到:

public SimpleStepBuilder<I, O> reader(ItemReader<? extends I> reader) {
this.reader = reader;
return this;
}

我通过像这样链接调用来理解:

@Bean
public Step step(final AccountReader accountReader, final AccountProcessor accountProcessor) {
return stepBuilderFactory.get("step")
.<COR_ACC_ACCOUNT, Account>chunk(10)
.reader(accountReader)
.processor(accountProcessor)
.writer(new JsonWriter<>())
.build();
}

reader()方法将需要 ItemProcessor<COR_ACC_ACCOUNT>

我发现这种保持类型安全的方式很酷。

现在是我的问题。给出以下代码:

@Component
public class ItemDictionary {

private final Map<Class, ItemReader> itemReaders;

@Autowired
public ItemDictionary(final List<ItemReader> readers) {
itemReaders = readers.stream().collect(Collectors.toMap(
ItemReader::getClass,
Function.identity()
));

public <I> ItemReader<I> getReader(final Class clazz) {
return itemReaders.get(clazz);
}

}

我想定义Step上面定义如下:

@Bean
public Step step() {
return stepBuilderFactory.get("step")
.<COR_ACC_ACCOUNT, Account>chunk(10)
.reader(<COR_ACC_ACCOUNT>itemDictionary.getReader(AccountReader.class))
.processor(accountProcessor)
.writer(new JsonWriter<>())
.build();
}

itemDictionary基本上是一个包含所有 ItemReader 的 Map我的 Spring 上下文中存在实现。

此电话<COR_ACC_ACCOUNT>itemDictionary.getReader(AccountReader.class)被编译器拒绝为 illegal start of expression

我错过了什么吗?

是否仍然可以使用 ItemDictionnary 保留类型安全检查?

最佳答案

是的,这个语法在java中实际上是错误的。

您无法在此处保留类型安全性,因为当您将实现存储到 private final Map<Class, ItemReader> itemReaders 时,您已经失去了它。

我建议最简单的解决方案是进行类型转换:

(ItemReader<COR_ACC_ACCOUNT>) itemDictionary.getReader(AccountReader.class)

或者,如果您能解释一下 COR_ACC_ACCOUNT 的话,我们可以进一步思考它。是。我感觉这是一个通用类型,对吗?

    @Bean
public Step step() {
return stepBuilderFactory.get("step")
.<COR_ACC_ACCOUNT, Account>chunk(10)
.reader((ItemReader<COR_ACC_ACCOUNT>) itemDictionary.getReader(AccountReader.class))
.processor(accountProcessor)
.writer(new JsonWriter<>())
.build();
}

关于java - SpringBatch Step chunk 中的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52858122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com