You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:54:22