首页 > 解决方案 > 如何避免使用具有目标类型 List 的 Spring ConversionService 进行强制转换?

问题描述

我有以下弹簧转换器:

@Component
public class MyObjectToStringList implements Converter<MyObject, List<String>>{

    @Override
    public List<String> convert(MyObject obj) {
        List<String> items = new ArrayList<>(
                Arrays.asList(
                        obj.get().split("\\r?\\n")));

        items.remove(0);

        return items;
    }

}

在另一个组件中,我通过转换服务使用转换器:

@Component
@RequiredArgsConstructor
public class MyService {

    private final ConversionService conversionService;

    public List<String> get(MyObject obj) {

        @SuppressWarnings("unchecked")
        List<String> rows = (List<String>) conversionService.convert(obj, List.class);

这可行,但无论如何可以避免未经检查的演员表吗?

标签: javaspring

解决方案


您可以将目标类型更改为String[]并修改转换器,如下所示:

@Component
public class MyObjectToStringList implements Converter<MyObject, String[]>{

    @Override
    public String[] convert(MyObject obj) {
        List<String> items = new ArrayList<>(
                Arrays.asList(
                        obj.get().split("\\r?\\n")));

        items.remove(0);

        return items.toArray(new String[0]);
    }

}

然后以这种方式执行转换:

List<String> rows = Arrays.asList(conversionService.convert(obj, String[].class));

PS 受此答案启发:https ://stackoverflow.com/a/11845385/5572007


推荐阅读