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

Java泛型类型参数擦除:MyList类擦除后的代码验证

关于Java泛型类型擦除的正确结果

嘿,这个问题抓得很准,咱们把Java类型擦除的细节掰扯清楚:

首先,你的猜测有一点偏差——无界泛型参数确实会被擦除为Object,但容器类型List擦除后会变成原始类型List,而不是List。

正确的类型擦除后代码应该是这样的:

public class MyList { 
    private List list; 
    public void setList(List list) { 
        this.list = list; 
    } 
    public List getList() { 
        return list; 
    } 
}

为什么不是你写的List<Object>呢?原因在于Java的类型擦除逻辑:

  • 对于泛型类的类型参数(这里的),无边界时会替换为Object;
  • 但对于参数化类型(比如List),擦除操作会直接移除所有泛型参数信息,退回到对应的原始类型(也就是不带任何泛型参数的List)。

简单来说,List<Object>是一个明确的参数化类型,而类型擦除的目标是消除所有泛型相关的类型信息,所以不会保留<Object>这个部分,只会留下原始的List类。

如果你的泛型参数有边界,比如MyList<E extends Number>,那E会被擦除为Number,但List依然会擦除为原始类型List,而不是List。

内容的提问来源于stack exchange,提问作者Sattyaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:29:33