> 文章列表 > 泛型

泛型

泛型

目录

泛型概述

泛型的好处

泛型方法

泛型概述

泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。

泛型的格式:<数据类型>

注意:泛型只能支持引用数据类型;

import java.util.ArrayList;
import java.util.Iterator;public class GenericsDemo1 {public static void main(String[] args) {//1.创建集合的对象//如果我们没有给集合指定类型,默认为所有的数据类型都是Object类型;//此时推出了泛型;ArrayList<String> list=new ArrayList();//2.添加数据//list.add(123);list.add("aaa");//list.add(new Student("zhangsan",123));//3.遍历集合获取里面的每一个元素;Iterator<String> it=list.iterator();while(it.hasNext()){String str=(String)it.next();str.length();System.out.println(str);}}
}

泛型的好处

  • 统一数据类型
  • 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来;

泛型的细节:

  • 泛型中不能写基本数据类型;
  • 指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型;
  • 如果不写泛型,类型默认是Object;

泛型类:

使用场景:当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类;

import java.util.Arrays;public class MyArrayList<E> {//E:表示不确定的类型,该类型在类名后面已经定义过了;//e:形参的名字,变量名;Object[] obj=new Object[10];int size;public boolean add(E e){obj[size]=e;size++;return true;}public E get(int index){return (E)obj[index];//强转;}@Overridepublic String toString() {return Arrays.toString(obj);}
}
public class GenericsDemo2 {public static void main(String[] args) {MyArrayList<String> list=new MyArrayList<>();//list.add("aaa");//list.add("bbb");//System.out.println(list);//[aaa, bbb, null, null, null, null, null, null, null, null]MyArrayList<Integer> list2=new MyArrayList<>();list2.add(123);list2.add(456);list2.add(789);int i=list2.get (0);System.out.println(i);System.out.println(list2);}
}

泛型方法

方法中形参的类型不确定时,可以使用类名后面定义的泛型<E>,表示不确定的类型;

方法中形参类型不确定时:

  • 使用类名后面定义的泛型;
  • 在方法申明定义自己的泛型;

格式:

修饰符<类型>返回值类型 方法名(类型 变量名){

}

import java.util.ArrayList;public class ListUtil {private ListUtil(){}//1.定义一个静态方法addAll,用来添加多个集合的元素;public static<E> void addAll(ArrayList<E> list, E e1, E e2, E e3, E e4){list.add(e1);list.add(e2);list.add(e3);list.add(e4);}public void show(){System.out.println("小仙女");}}
import java.util.ArrayList;public class GenericsDemo3 {public static void main(String[] args) {//测试类ArrayList<String> list=new ArrayList<>();ListUtil.addAll(list,"aaa","bbb","ccc","ddd");System.out.println(list);//[aaa, bbb, ccc, ddd]}
}

泛型接口:

  • 实现类给出具体的类型
  • 实现类延续泛型,创建实现类对象时再确定类型;