弄懂java泛型中的extends和super

记住一个前提

java 中的List<> 在运行中, 只会是一种类型 ;例如: LIst<Dog> List<Cat> List<Object>

判断能否转换成统一一种类型, 能转换就能写

Animal是Dog Cat的超类 littleDog是Dog的子类 littleCat 是Cat的子类

List<? extends Animal> a;

List<? super Dog> b;

  1. 往a中加Cat,因为是extends, 所以a中泛型的类型可能是Dog,也就是Animal的子类, 此时Cat不能转成Dog, 因此不能写,违背前提;
  2. 往b中加littleDog, 如果此时b中是Object, littleDog能转成Object, 如果此时b中是Dog, littleDog也能转成Dog, b中存的都是Dog,没问题。 总之, b中实际的类型,肯定是Dog的超类, 那么无论加入什么Dog的子类,都能强转到那个类型。
相关推荐
用户239526180101 小时前
别再 new 满天飞了!一文搞懂工厂模式,程序员终于不用手搓对象了 😆
java
毋语天1 小时前
Python 模块、包与异常处理:构建更稳健的程序
开发语言·python
阿丰资源1 小时前
基于SpringBoot的企业客户管理系统(附源码)
java·spring boot·后端
IT观察者1 小时前
Qt单例的优雅实现
开发语言·qt
两年半的个人练习生^_^1 小时前
SpringBoot 项目使用 Jasypt 实现配置文件敏感信息加密
java·spring boot·后端
H_unique1 小时前
LangChain:消息
开发语言·langchain
求知也求真佳2 小时前
S07---S11 | 系统加固闭环总结:让你的 AI Agent 从 “能跑” 到 “稳跑、安全跑、长期跑”
开发语言·agent
JAVA学习通2 小时前
开云集致 Java开发 实习 一面
java·开发语言
小陈工2 小时前
Python异步编程进阶:asyncio高级模式与性能调优
开发语言·前端·数据库·人工智能·python·flask·numpy