java中什么叫泛型,java为什么使用泛型
00-1010泛型概述和优点自定义泛型类自定义泛型方法自定义泛型接口泛型通配符、上限和下限摘要
目录
泛型概述
泛型:JDK5中引入的一个特性,可以在编译时约束和检查操作的数据类型。泛型的格式:数据类型;注意:泛型只能支持引用数据类型。系统的所有接口和实现类都支持使用泛型。泛型的好处:
统一数据类型。将运行时问题提前到编译期,避免强制类型转换可能出现的异常,因为类型可以在编译期确定。泛型可以在很多地方进行定义:
类后-泛型类方法声明-泛型方法接口后-泛型接口
泛型的概述和优势
泛型类的概述
与类同时定义泛型的类是泛型类。泛型类的格式:修饰符类名泛型变量(只能是引用类型){}示例:公共类myarraylist {}这里泛型变量t可以写成任意标识符,比如e、t、k、v等。作用:数据类型* *(必须是引用类型)* *可以在编译阶段指定,类似于集合的功能。
课程案例导学
模拟ArrayList集合,自定义一个集合MyArrayList集合,完成添加和删除函数的泛型设计。问题1:泛型类的核心思想?
用传输的实数据类型问题2:泛型类的作用?.替换所有出现的通用变量
编译阶段指定要操作的数据类型,这类似于集合的功能。
自定义泛型类
泛型方法的概述
当定义一个方法时,就定义了一个泛型方法。泛型方法的格式:修饰符泛型变量方法返回值方法名(参数列表){}示例:public T void show(T t) {//T表示参数的类型,通常在public或static之后}函数:泛型可以用在方法中,接收所有实际类型的参数,这使得方法的用途更加广泛。课程案例导学
给你一个任意类型的数组,你可以返回它的内容。那就是实现Arrays.toString (array)的功能!public class genetic demo { public static void main(String[]args){ String[]names={ 鲁诗梦,杨荫榆,王良,西瓜,向家 };printArray(名称);//将printArray方法中出现泛型的地方全部改为String type character[]character={ 2 , d , d , r };printArray(字符);//将printArray方法中出现泛型的地方全部改为字符类型integer [] ages={23,435,56,67,67 };printArray(年龄);//将printArray方法中出现泛型的地方全部改为整型} public static t void print array(t[]array){ if(array!=null){ StringBuilder sb=new StringBuilder([);for(int I=0;I数组.长度;i ){ sb.append(array[i])。追加(我!=数组.长度- 1?, : );
// StringBuilder的链式编程 } sb.append("]"); System.out.println(sb); }else{ System.out.println(array); } }}问题1、泛型方法的核心思想:
把出现泛型变量的地方 全部替换 成传输的真实数据类型
问题2、泛型方法的作用
方法中可以使用泛型接收一 切实际类型的参数,方法更具备通用性
自定义泛型接口
泛型接口的概述
使用了泛型定义的接口就是泛型接口。泛型接口的格式:修饰符 interface 接口名称<泛型变量>{ }范例: public interface Data<E>{}
课程案例导学
教务系统,提供一个接口可约束一定要完成数据(学生,老师)的增删改查操作
问题1、泛型接口的作用
泛型接口可以约束实现类,实现类可以在实现接口的时候传入自己操作的数据类型这样重写的方法都将是针对于该类型的操作。
泛型通配符、上下限
通配符:?
? 可以在“使用泛型”的时候代表 一切类型。 E T K V 是在定义 泛型 的时候使用的。
泛型通配符:案例导学
开发一个极品飞车的游戏,所有的汽车都能一起参与比赛。特别注意:虽然BMW和BENZ都继承了Car但是ArrayList<BMW>和ArrayList<BENZ>与ArrayList<Car>没有关系的!!import java.util.ArrayList;public class GenericDemo { public static void main(String[] args) { ArrayList<BENZ> benzs = new ArrayList<>(); benzs.add(new BENZ()); benzs.add(new BENZ()); benzs.add(new BENZ()); go(benzs); // ? extends Car 为Car的子类都可以传入进去 ArrayList<BMW> bmws = new ArrayList<>(); bmws.add(new BMW()); bmws.add(new BMW()); bmws.add(new BMW()); go(bmws); ArrayList<Dog> dogs = new ArrayList<>(); dogs.add(new Dog());// go(dogs); // 不满足泛型上下限的条件 } public static void go(ArrayList<? extends Car> car){ // 上下限 }}class Dog{}// 父类class Car{}class BENZ extends Car{}class BMW extends Car{}
泛型的上下限:
? 可以在“使用泛型”的时候代表 一切类型。 ? extends Car: ?必须是Car或者其子类 泛型上限 ? super Car : ?必须是Car或者其父类 泛型下限
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行IT的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。