我对Java项目有疑问:
public class example {
public Data getData() {
List<Users> users = usersService.findByClinicId(id);
Type targetListType = new TypeToken<List<UserDTO>>() {}.getType();
List<UserDTO> usersDTO = modelMapper.map(users, targetListType);
List<Personas> profesionales = personasService.findProfesionalsByClinicId(id);
targetListType = new TypeToken<List<PersonaDTO>>() {}.getType();
List<PersonaDTO> profesionalesDTO = modelMapper.map(profesionales, targetListType);
List<Personas> auxiliares = personasService.findAuxiliarsByClinicId(id);
targetListType = new TypeToken<List<PersonaDTO>>() {}.getType();
List<PersonaDTO> auxiliaresDTO = modelMapper.map(auxiliares, targetListType);
List<Prescripciones> prescripciones = prescripcionesService.findProfesionalsByClinicId(id);
targetListType = new TypeToken<List<PrescriptionNameDTO>>() {}.getType();
List<PrescriptionNameDTO> prescripcionesDTO = modelMapper.map(prescripciones, targetListType);
profesionales = entityToDTO(PersonaDTO.class, profesionales);
...
}
private <T> List<T> entityToDTO(Class<T> clazz, List<T> list) {
Type targetListType = new TypeToken<List<clazz>>() {}.getType();
List<PersonaDTO> auxiliaresDTO = modelMapper.map(list, targetListType);
}
}
这个想法是使用getData
函数来减少entityToDTO
函数的代码。
我的问题是:
entityToDTO
中,我想将想要的List类型传递给TypeToken第一个参数,但它不接受List,其中clazz是具有类名称的变量。是否可以在List菱形运算符内部传递一个要使用的类类型的变量?
更新:
这个想法是为了减少getData
函数的行数。
答案 0 :(得分:6)
为什么不通过Type
呢?
private <T> List<T> entityToDTO(Type type, List<T> list) {
return modelMapper.map(list, type);
}
在呼叫方,例如:
Type typeToUse = TypeToken.getParameterized(List.class, UserDTO.class).getType();
答案 1 :(得分:1)
您可以按如下所示更新您的entityToDTO方法:
public static <D, T> List<D> entityToDTO(final Collection<T> sourceList, Class<D> destinationCLass) {
if (Objects.isNull(sourceList)) {
return null;
}
return sourceList.stream().map(entity -> modelMapper.map(entity, destinationCLass))
.collect(Collectors.toList());
}
答案 2 :(得分:0)
我认为,要减少for view in self.view.subviews {
if view != viewYouWantToExclude {
view.addGestureRecognizer(tap)
}
}
,您应该添加过滤条件。
这是通用方法:
getData()
DAO层:
class SearchDataRequest {
private String id;
private Type type;
//... other parameters
}
public Data getData(SearchDataRequest request) {
return reposiotry.getDataByFilter(request);
}