Java泛型get方法在foreach循环报错:无法将Object转为U
解决Java泛型方法中foreach循环的类型转换错误
你的编译错误出在outputBoxes方法的foreach循环里:你用了原始类型的Box,没有指定泛型参数<U>。原始类型的Box调用get()方法会返回Object类型,无法直接赋值给泛型类型U,所以编译器报错。
修复方法
把foreach循环中的Box改成带泛型参数的Box<U>,让编译器保留类型信息:
for (Box<U> box : boxes) { U boxContents2 = box.get(); System.out.println(boxContents2.toString()); }
修复后的完整代码
package org.example; import java.util.List; public class BoxDemo { public static <U> void addBox(U u, List<Box<U>> boxes) { Box<U> box = new Box<>(); box.set(u); boxes.add(box); } public static <U> void outputBoxes(List<Box<U>> boxes) { // 无错误 U boxContents = boxes.get(0).get(); for (Box<U> box : boxes) { U boxContents2 = box.get(); System.out.println(boxContents2.toString()); } } }
补充说明
为什么boxes.get(0).get()没有错误?因为boxes是List<Box<U>>类型,get(0)返回的是Box<U>,调用get()自然返回U类型。而foreach循环里如果用原始类型Box,就会丢失泛型类型信息,导致get()返回Object,无法直接转换为U。
内容的提问来源于stack exchange,提问作者SmokingTurtle
相关产品推荐
相关产品推荐

