简单理解泛型及其特性 桃扇骨 2022-06-16 08:08 138阅读 0赞 ## 泛型概述 ## Collection<E>, E - 在此 collection 中保持的元素的类型 ## 泛型好处 ## * 提高安全性(将运行期的错误转换到编译期) * 省去强转的麻烦 ## 泛型基本使用 ## * <>中放的必须是引用数据类型 ## :泛型使用注意事项 ## * 前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型) import java.util.ArrayList; import java.util.Iterator; import bean.Student; public class c { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList list = new ArrayList(); list.add(10); list.add(true); list.add(new Student("张三", 23)); list.add(new Student("李四", 24)); Iterator it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); //Student p = (Student) it.next(); 向下转型 //System.out.println(p.getName() + "..." + p.getAge()); //java.lang.ClassCastException } /*10 true Student [name=张三, age=23] Student [name=李四, age=24]*/ ArrayList<Student> list1 = new ArrayList<Student>(); //list1.add(10); //The method add(int, Student) in the type ArrayList<Student> is not applicable for the arguments (int) //list.add(true); list1.add(new Student("张三", 23)); list1.add(new Student("李四", 24)); Iterator<Student> it1 = list1.iterator(); while(it1.hasNext()) { //Student p = it1.next(); //不用强转 //System.out.println(p.getName() + "..." + p.getAge()); /*张三...23 李四...24*/ //System.out.println(it1.next().getName() + "..." + (it1.next()).getAge()); //next方法只能调用一次,如果调用多次会将指针向后移动多次 } //int[] arr = new byte[5]; //数组要保证前后的数据类型一致 //ArrayList<Object> list = new ArrayList<Person>(); //集合的泛型要保证前后的数据类型一致 //ArrayList<Object> list = new ArrayList<>(); //1.7版本的新特性,菱形泛型 ArrayList<Object> list2 = new ArrayList<>();//泛型最好不要定义成Object,没有意义 list2.add("aaa"); list2.add(true); } } ## 泛型集合的遍历 ## import java.util.ArrayList; import java.util.Iterator; import bean.Student; public class d { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<String> list = new ArrayList<>(); //创建集合对象 list.add("a"); list.add("b"); list.add("c"); list.add("d"); //list.add(arg0) Iterator<String> it = list.iterator(); while(it.hasNext()) { System.out.println(it.next());//a b c d } ArrayList<Student> list1 = new ArrayList<>(); list1.add(new Student("张三", 23)); list1.add(new Student("李四", 24)); list1.add(new Student("王五", 25)); list1.add(new Student("赵六", 26)); Iterator<Student> it1 = list1.iterator(); while(it1.hasNext()) { Student p = it1.next(); //将集合中的每一个元素用Student记录 System.out.println(p.getName() + "..." + p.getAge()); } } } ## 泛型的由来 ## 泛型的由来:通过Object转型问题引入 早期的Object类型可以接收任意的对象类型, 但是在实际的使用中,会有类型转换的问题。也就存在这隐患, 所以Java提供了泛型来解决这个安全问题。 早期的Object类型可以接收任意的对象类型, 但是在实际的使用中,会有类型转换的问题。也就存在这隐患, 所以Java提供了泛型来解决这个安全问题。 ## 泛型类概述<T> ## * 把泛型定义在类上 定义格式 * public class 类名<泛型类型1,…> 注意事项 * 泛型类型必须是引用类型 ## 泛型方法概述 ## * 把泛型定义在方法上 定义格式 * public <泛型类型> 返回类型 方法名(泛型类型 变量名) ## 泛型接口概述 ## * 把泛型定义在接口上 定义格式 * public interface 接口名<泛型类型> public class e { public static void main(String[] args) { /*Demo d = new Demo<String>(); d.show("a");*/ Demo dd = new Demo(); dd.show("aa"); System.out.println("接口"); } } // interface Inter<T> { public void show(T t); } class Demo implements Inter<String> {//推荐用这种 @Override public void show(String t) { System.out.println("接口 String"); } } /*class Demo<T> implements Inter<T> {//没有必要在实现接口的时候给自己类加泛型 @Override public void show(T t) { System.out.println("接口T"); } }*/ ## 泛型高级之通配符<?> ## * 任意类型,如果没有明确,那么就是Object以及任意的Java类了 ? extends E * 向下限定,E及其子类 ? super E * 向上限定,E及其父类 Collection类中的一个add方法 boolean addAll(Collection<? extends E> c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 如果在进行此操作的同时修改指定的 collection,那么此操作行为是不确定的。 (这意味着如果指定的 collection 是此 collection,并且此 collection 为非空,那么此调用的行为是不确定的。) 参数: c - 包含要添加到此 collection 的元素的 collection 返回: 如果此 collection 由于调用而发生更改,则返回 true import java.util.ArrayList; import java.util.List; import bean.Person; import bean.Student; public class f { public static void main(String[] args) { //List<?> list = new ArrayList<Integer>();//当右边的泛型是不确定时,左边可以指定为? ArrayList<Student> list1 = new ArrayList<>(); list1.add(new Student("张三", 23)); list1.add(new Student("李四", 24)); list1.add(new Student("王五", 25)); ArrayList<Person> list2 = new ArrayList<>(); list2.add(new Person("赵六", 26)); list2.add(new Person("周七", 27)); System.out.println(list2); list1.addAll(list2);//person是student的子类,自动类型提升 System.out.println(list1); //list2.addAll(list1); } } 还有一个person类,继承于student package bean; public class Person extends Student { public Person() { super(); } public Person(String name, int age) { super(name ,age); } }
相关 Java泛型特性:实战案例,理解应用 Java泛型是Java语言中一种强大的类型机制,它允许在编写代码时定义参数化的类型。 以下是一些关于Java泛型的实战案例以及理解: 1. 泛型集合类(如List、Set等 短命女/ 2024年10月27日 15:36/ 0 赞/ 38 阅读
相关 Java泛型:如何理解泛型及其在代码中的应用案例? 泛型是Java语言中的一种特性,它允许我们创建可以处理多种数据类型的类或方法。这种类型化不是针对特定的类型,而是对一个范围或者模板。 在代码中应用泛型的例子很多: 1. ` 川长思鸟来/ 2024年10月11日 06:03/ 0 赞/ 64 阅读
相关 理解基础:Java泛型及其优缺点分析 Java泛型,是Java 5引入的一个新特性,它主要通过类型参数来实现类型安全的复用代码。 优点: 1. 类型安全性:在编译时期,就可以检查类型是否匹配。 2. 泛化代码复用 「爱情、让人受尽委屈。」/ 2024年09月25日 10:39/ 0 赞/ 56 阅读
相关 浅析Java中的泛型特性及其应用 在Java编程中,泛型(Generics)是一个强大的特性,它允许我们在创建容器对象如List、Map等时,以任意类型的数据进行填充。 1. **泛型定义**: 在创建 我不是女神ヾ/ 2024年09月24日 04:30/ 0 赞/ 53 阅读
相关 理解并运用Java的泛型特性 Java的泛型是一种编程技术,它允许我们创建可以处理多种类型的数据类型的类。具体来说,泛型包括以下几个关键部分: 1. 泛型类型:通常以<T>表示,T是一个代表任何类型的通配 快来打我*/ 2024年09月12日 00:27/ 0 赞/ 54 阅读
相关 理解Java中的泛型及其边界约束 在Java中,泛型是一种类型参数化的方式,它允许我们创建可以处理多种数据类型的类。 1. 泛型声明: ```java // 基本的泛型声明,后面可以跟类型参数 偏执的太偏执、/ 2024年09月11日 16:18/ 0 赞/ 66 阅读
相关 泛型(1):简单泛型 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类,如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。 在面向对象编程 朱雀/ 2023年07月13日 15:23/ 0 赞/ 135 阅读
相关 简单理解泛型及其特性 泛型概述 Collection<E>, E - 在此 collection 中保持的元素的类型 泛型好处 提高安全性(将运行期的错误 桃扇骨/ 2022年06月16日 08:08/ 0 赞/ 139 阅读
相关 泛型特性 泛型 泛型的概念:泛型是通过参数化类型来实现在同一份上操作多 种数据类型的技术 利用“参数化类型”将类型抽象化,从而实现灵活的复用 泛型的优点: 1. 泛型增强 £神魔★判官ぃ/ 2021年11月02日 14:18/ 0 赞/ 268 阅读
还没有评论,来说两句吧...