Java SE 宋红康 days04-高级篇-泛型
1. 在集合中使用泛型:
① 泛型类型必须是类,不能是基本数据类型,要用包装类替换;
② 如果实例化时,没有指明泛型的类型,默认类型为 java.lang.Object 类型;
2. 如何定义 泛型类、泛型接口、泛型方法
泛型类:子类在继承父类时,指明了泛型类型,则实例化子类对象时不需要再指明泛型了;
注意:
a. 如果泛型不指定,均按照Object处理;
b. 如果泛型结构式一个接口或抽象类,则不可创建泛型类的对象;
c. 静态方法中不可以使用类的泛型(如异常类等)
d. 声明一个泛型数组,必须用 T[ ] arr = (T[ ]) new Object[10];的形式
泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系;
a. 泛型方法所属的类是不是泛型类都没有关系;
b. 泛型方法可以声明为静态的,泛型参数是在调用方法时确定的,并非是在实例化类时确定的;
3. 泛型在继承方面的体现
通配符: ?,类A时类B的父类,G<A>和G<B>没有关系,二者的父类是 G<?>;如:List<Object>、List<String> 的父类是 List<?>;
注意:对于 List<?> 类型的实例,就不能向其内部添加数据,除了添加 null 之外;
允许读取数据,读取的数据类型为 Object;
4. 有限制条件的通配符的使用
? extends Person:G<? extends A> 可以作为 G<A> 和 G<B> 的父类,其中 B 是 A 的子类或本身(B ≤ A);
? super Person:G<? super A> 可以作为 G<A> 和 G<B> 的父类,其中 B 是 A 的父类或本身(B ≥ A);
写数据:父类不能赋值给子类;读数据没有限制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通