java 泛型
泛型
- 所有对象底层都是Object,不能对数据进行约束;
- 向上向下转型,太过频繁,影响效率;
泛型是给编译器的,又称参数化类型;
-
可以在类声明时通过一个标识表示类中某个【属性,方法返回值,参数】的类型;
-
泛型是编译阶段确定,所以不能修饰静态成员;
-
当在声明的时候,没有传入类型的时候,默认是Object类型;
-
给泛型的数据类型,必须是引用对象;
List<Integer> arrayList = new ArrayList<Integer>(); //简化形式 List<Integer> arrayList = new ArrayList<>(); //默认Object类型 List arrayList = new ArrayList();
自定义泛型:
-
普通成员可以使用泛型【属性,方法】;
-
静态不能使用泛型,静态是和类相关,而泛型是和对象创建相关;
-
使用泛型的数组不能初始化,
- 比如进行new E[num],因为不确定E的类型,无法开辟空间;
-
泛型的类型,是在创建对象的时候确定,
-
在创建对象时,没有指定,默认为Object;
-
泛型方法语句:
修饰符
返回类型 方法名(参数列表){} -
泛型不具有继承型;
List<Object> arrayList = new ArrayList<String>(); //语句错误;
-
泛型的通配符:
-
<?>:取出是Object类型;
public static void func(List<?> list) { for (Object obj : list){ System.out.println(obj.getClass()); } }
-
-
<? extends AA>: 支持AA类及其子类,规定了上限;
public static void func(List<? extends AA> list) { for (AA obj : list){ System.out.println(obj.getClass()); } }
-
<? super AA>:支持AA类及其父类,规定了下限;
public static void func(List<? super AA> list) { for (Object obj : list){ System.out.println(obj.getClass()); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!