在Java中,泛型的类型擦除是指在编译时期,泛型类型信息会被擦除为其原始类型。在使用ArrayList>这样的泛型调用时,会遇到类型擦除的问题。解决这个问题的方法是使用通配符边界限定来限制泛型的类型。
以下是一个示例代码,演示了如何在ArrayList>中使用通配符边界限定来解决类型擦除问题:
import java.util.ArrayList;
import java.util.List;
public class GenericExample {
public static void main(String[] args) {
ArrayList> listOfLists = new ArrayList<>();
List stringList = new ArrayList<>();
stringList.add("Hello");
stringList.add("World");
listOfLists.add(stringList);
List integerList = new ArrayList<>();
integerList.add(10);
integerList.add(20);
listOfLists.add(integerList);
printElements(listOfLists);
}
public static void printElements(ArrayList> listOfLists) {
for (List> list : listOfLists) {
for (Object element : list) {
System.out.println(element);
}
}
}
}
在上面的示例代码中,我们使用了通配符 ?
来表示泛型的类型。通过使用 List>
,我们可以在ArrayList中存储各种类型的List,例如List
需要注意的是,由于类型擦除的限制,我们无法在编译时期获得List的具体类型信息。因此,在处理ArrayList>时,只能以Object的形式来处理其中的元素。