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

Java泛型中List<Dog>无法传给List<Animal>参数的最优解决方案是什么

解决方案

最优实现方式是使用Java泛型的上界通配符定义方法参数,代码如下:

public void printNames(List<? extends Animal> list) {
    for (Animal a : list) {
        System.out.println(a.getName());
    }
}

说明

  • 该写法支持传入List<Animal>、List<Dog>、List<Cat>等所有Animal及其子类的列表,不需要额外编写重载方法,也不会出现类型擦除导致的签名冲突问题。
  • 原理:? extends Animal表示接收的List元素类型是Animal或者Animal的任意子类,遍历读取时所有元素都可以安全向上转型为Animal,调用getName()方法完全合法。
  • 限制:如果方法内需要修改列表(比如添加、删除元素),该通配符写法会受限(仅支持插入null,无法插入其他具体对象),但仅做读取遍历的场景完全不受影响,是当前需求的最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:48:02