gpt4 book ai didi

java - 泛型方法,泛型类型未知

转载 作者:行者123 更新时间:2023-11-29 07:29:28 32 4
gpt4 key购买 nike

我有很多 bean 我想转换成 Dto

在每节课上,我都会做类似的事情

private List<AddressDto> convertsToDto(List<Address> addresses) {

List<AddressDto> addressesDto = new ArrayList<>();
addresses.stream().map((address) -> convertToDto(address)).forEachOrdered((addressDto) -> {
addressesDto.add(addressDto);
});
return addressesDto;

}

convertToDto 将在每个类中....但是对于 convertsToDto,我将放入一个抽象类,每个类将扩展它并放置一个具有通用类型的通用 convertsToDto 方法

public abstract class BaseService {
public List<T> convertsToDto(List<R> beans) {

List<T> listDto = new ArrayList<>();
beans.stream().map((bean) -> convertToDto(bean)).forEachOrdered((dto) -> {
listDto.add(dto);
});
return listDto;
}
}

我总是得到 TR 是未知的......似乎错过了什么。

最佳答案

从向泛型方法添加 TR 类型参数开始。但是,这不会解决问题,因为 convertToDto(bean) 将保持未定义状态。

这里有几个选项:

  • 您可以定义 bean 接口(interface)来生成其 DTO,或者
  • 您可以传递一个 bean-to-DTO 函数对象。

这是第一种方法:

interface Bean<T> {
T convertToDto();
}
public abstract class BaseService {
public <T,R extends Bean<T>> List<T> convertsToDto(List<R> beans) {
return beans.stream().map((b) -> b.convertToDto()).collect(Collectors.toList());
}
... // Additional methods
}

这是第二种方法:

public abstract class BaseService {
public <T,R> List<R> convertsToDto(List<T> beans, Function<T,R> convert) {
return beans.stream().map((b) -> convert.apply(b)).collect(Collectors.toList());
}
}

关于java - 泛型方法,泛型类型未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037718/

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