如何使用泛型在Java中从List<?>转换为List<T>?
2022-09-03 12:46:55
						在Java中,我如何转换为使用通用方法,以便我可以用单个方法调用替换如下所示的模式:List<?>List<T>
List untypedList = new ArrayList();  // or returned from a legacy method
List<Integer> typedList = new ArrayList<Integer>();
for (Object item: untypedList)
    typedList.add((Integer)item);
请注意,上述代码不会生成任何类型安全警告,理想情况下,您的解决方案也不应生成任何此类警告。
如果该列表具有公共默认构造函数,以下解决方案是否有效?Class<L>
public class ListUtil {
    public static <T, L extends List<T>> L typedList(List<?> untypedList, Class<T> itemClass, Class<L> listClass) {
        L list = null;
        try {
            list = listClass.newInstance();
        } catch (InstantiationException e) {
        } catch (IllegalAccessException e) {
        }
        for (Object item: untypedList)
            list.add(itemClass.cast(item));
        return list;
    }
}
(请注意,抛出 或 如果 实例没有公共默认构造函数。如果该方法不能正确处理这些异常,可能会出现什么问题?listClass.newInstance()InstantiationExceptionIllegalAccessExceptionClass<L>
笔记:
- 
T是结果列表中每个项的类型。 - 
L是我希望创建的列表的类型(扩展 )。List<T> - 
untypedList是“非类型化”输入列表,实际上与 相同。List<Object> - 
itemClass表示 的运行时类。T - 
listClass表示 的运行时类。L