集合-<>泛型-JDK1.5之后引入
一、泛型语法:<> 一对尖括号
- <>泛型是JDK1.5之后引入的语法机制;它只在编译阶段起作用,给编译器作为参考
- 优点:使集合里面的元素统一了,从集合里面取出来的元素就是泛型指定的元素,避免了大量的向下转型
- 缺点:缺乏多样性;不影响它使用,因为在开发过程中大部分业务元素类型统一;
- 自定义泛型的时候,<> 尖括号中的是一个标识符,随便写。不用泛型就是Object类型。使用泛型之后就只能是指定的类型
- java源代码中经常出现的是: <E>和<T>; E是Element单词首字母。T是Type单词首字母。
- ArrayList<这里的类型会自动推断>(),前提是JDK8之后才允许。
- 自动类型推断,钻石表达式!new ArrayList<>():<>会自动推断,里面可以不写
- List<Animal> myList = new ArrayList<>();
- 使用泛型List<Animal>之后,表示List集合中只允许存储Animal类型的数据。存String就编译报错了。
创建Object实体对象
public class GenericTest01 { public static void main(String[] args) { /* // 不使用泛型机制,分析程序存在缺点 List myList = new ArrayList(); // 准备对象 Cat c = new Cat(); Bird b = new Bird(); // 将对象添加到集合当中 myList.add(c); myList.add(b); // 遍历集合,取出每个Animal,让它move Iterator it = myList.iterator(); while(it.hasNext()) { // 没有这个语法,通过迭代器取出的就是Object //Animal a = it.next(); Object obj = it.next(); //obj中没有move方法,无法调用,需要向下转型! if(obj instanceof Animal){ Animal a = (Animal)obj;//强制类型转换 a.move(); } } */ // 使用JDK5之后的泛型机制 // 使用泛型List<Animal>之后,表示List集合中只允许存储Animal类型的数据。 // 用泛型来指定集合中存储的数据类型。 List<Animal> myList = new ArrayList<Animal>(); // 指定List集合中只能存储Animal,那么存储String就编译报错了。 // 这样用了泛型之后,集合中元素的数据类型更加统一了。 //myList.add("abc"); Cat c = new Cat(); Bird b = new Bird(); myList.add(c); myList.add(b); // 获取迭代器 // 这个表示迭代器迭代的是Animal类型。 Iterator<Animal> it = myList.iterator(); while(it.hasNext()){ // 使用泛型之后,每一次迭代返回的数据都是Animal类型。 //Animal a = it.next(); // 这里不需要进行强制类型转换了。直接调用。 //a.move(); // 调用子类型特有的方法还是需要向下转换的! Animal a = it.next(); if(a instanceof Cat) { Cat x = (Cat)a; x.catchMouse(); } if(a instanceof Bird) { Bird y = (Bird)a; y.fly(); } } } } public class Animal { // 父类自带方法 public void move(){ System.out.println("动物在移动!"); } } public class Cat extends Animal { // 特有方法 public void catchMouse(){ System.out.println("猫抓老鼠!"); } } public class Bird extends Animal { // 特有方法 public void fly(){ System.out.println("鸟儿在飞翔!"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix