南昌网站建设服务器,深圳知名网站建设平台,网页制作基础教程例子,建立网站的目的和意义文章目录 泛型21.1 概述21.2 泛型类21.3 泛型方法21.4 泛型接口 泛型
21.1 概述
JDK5中引入的特性#xff0c;在编译阶段约束操作的数据类型#xff0c;并进行检查
泛型格式#xff1a;数据类型
泛型只能支持引用数据类型#xff0c;如果写基本数据类型需要写对… 文章目录 泛型21.1 概述21.2 泛型类21.3 泛型方法21.4 泛型接口 泛型
21.1 概述
JDK5中引入的特性在编译阶段约束操作的数据类型并进行检查
泛型格式数据类型
泛型只能支持引用数据类型如果写基本数据类型需要写对应的包装类。
泛型好处
统一数据类型把运行时期的问题提到了编译期间避免了强制类型转换可能出现的异常因为编译阶段类型就能确定下来。
泛型细节 泛型中不能写基本数据类型 因为基本数据类型不能转成Object类型包装类才能转成Object类型 指定泛型后传递数据时可以传入该类类型或者其子类类型 如果不写泛型类型默认是Object
21.2 泛型类
使用场景当一个类中某个变量的数据类型不确定时可以定义带有泛型的类。
格式修饰符 class 类名类型{....}举例E可以理解为变量但不是变量不是记录数据的是用来记录数据类型的public class ArrayListE{//..... 当创建给类对象时E就确定类型}//自定义泛型类
public class MyArrayListE{Object[] obj new Object[5];int size; // size:表示长度即存了几个元素// E:表示不确定的类型// e:形参的名字变量名// 添加元素public boolean add(E e){obj[size] e;size;return true;}// 获取元素public E get(int index){return (E) obj[index];}// 重写toString方法Overridepublic String toString() {return Arrays.toString(obj);}
}
public class Test {public static void main(String[] args) {//创建自己定义泛型类的对象MyArrayListString list new MyArrayList();list.add(aaa);list.add(bbb);list.add(ccc);System.out.println(list);//[aaa, bbb, ccc, null, null]String s list.get(0);System.out.println(s);//aaaMyArrayListInteger list1 new MyArrayList();list1.add(1);list1.add(2);list1.add(3);Integer integer list1.get(1);System.out.println(integer);//2}
}21.3 泛型方法
方法中形参类型不确定时 方案1使用类名后定义的泛型如21.2中的add方法 在本类里所有方法都可以用 方案2在方法申明上定义自己的泛型 只有本方法能用
格式修饰符 类型 返回值类型 方法名(类型 变量名){}
举例public T void show(T t){// 调用该方法时T才能确定类型
}public class ListUtil {// 私有化构造方法不让外界本类的对象private ListUtil(){}// 类中定义静态方法addAll, 用来添加多个集合的元素
//public static E void addAll(ArrayListE list,E e1,E e2){// list.add(e1);// list.add(e2);// }//可变参数 E...epublic static E void addAll(ArrayListE list,E...e){for (E element : e) {list.add(element);}}public void show(){System.out.println(这是自定义工具类....);}}
public class Test {public static void main(String[] args) {// 在创建对象时就可以确定泛型方法的形参类型ArrayListString list new ArrayList();ListUtil.addAll(list,6,8);System.out.println(list);//[6, 8]ArrayListInteger list2 new ArrayList();ListUtil.addAll(list2,5,1);System.out.println(list2);//[5, 1]}
}21.4 泛型接口
格式修饰符 interface 接口名类型{}举例public interface ListE{}泛型接口的两种使用方式1.实现类给出具体的类型2.实现类延续泛型创建实现类对象时再确定类型
// 1.实现类给出具体的类型,实现List接口
public class MyArrayList2 implements ListString {// 省略重写List里的抽象方法
}
public class Test {public static void main(String[] args) {//MyArrayList集合中只能存字符串,//创建MyArrayList对象时不用指定泛型MyArrayList list new MyArrayList();list.add(666);}
}// 2.实现类延续泛型创建实现类对象时再确定类型
public class MyArrayList02E implements ListE {// 省略重写List里的抽象方法
}
public class Test02 {public static void main(String[] args) {// 2.实现类延续泛型创建实现类对象时再确定类型MyArrayList02Integer list new MyArrayList02();list.add(6);}
}