Java类型转换泛型列表的父列表列表的子列表

时间:2014-03-25 05:51:32

标签: java list generics casting

我有一个类似ChildData1的课程,从Data延伸。 如何将List<List<ChildData1>>转换为List<List<Data>>

4 个答案:

答案 0 :(得分:0)

遍历列表元素和TYPECAST它。

答案 1 :(得分:0)

想象一下,如果你能做到这一点:

List<List<ChildData1>> foo = getListOfListOfChildData();
List<List<Data>> bar = foo; // there's your cast

ChildData2 childData2 = getSomeOtherChildData();
bar.get(0).add(childData2); // now you've added ChildData2

for (ChildData1 childData1 : foo.get(0)) {
  // Whoops! Suddenly you've got a ChildData2 in your ChildData1.
}

这些类型不是自然兼容的,如果没有某种@SuppressWarnings,就不容易相互转换。

答案 2 :(得分:0)

根据泛型规则,您可以在没有强制转换的情况下执行以下任务:

List<List<ChildData>> subClassList = ...
List<? extends List<? extends Data>> superClassList = subClassList;

答案 3 :(得分:-1)

如果Data是父级,则无需明确地对其进行类型转换。

List<List<Data>>> data = somemethod();

List<List<ChildData>>> somemethod(){};