目录
泛型的介绍
泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制
-
泛型的好处
-
把运行时期的问题提前到了编译期间
-
避免了强制类型转换
-
-
泛型的定义格式
-
<类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: <E> <T>
-
<类型1,类型2...>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V>
-
引入
当集合中什么都不写的时候,就可以添加任意的类型
java
public class GenericsDemo1 {
public static void main(String[] args) {
//没有泛型的时候,集合如何存储数据
//结论:
//如果我们没有给集合指定类型,默认认为所有的数据类型都是Object类型
//此时可以往集合添加任意的数据类型。
//带来一个坏处:我们在获取数据的时候,无法使用他的特有行为。
//此时推出了泛型,可以在添加数据的时候就把类型进行统一。
//而且我们在获取数据的时候,也省的强转了,非常的方便。
//1.创建集合的对象
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 = it.next();
//多态的弊端是不能访问子类的特有功能,所以就无法调用String里面的方法,比如说length()
//obj.length();
//str.length();
System.out.println(str);
}
}
}
泛型的多个定义方式
泛型类
当我在编写一个类的时候,如果不确定类型,那么这个类就可以定义为泛型类。
java
public class MyArrayList<E> {
Object[] obj = new Object[10];
int size;
/*
E : 表示是不确定的类型。该类型在类名后面已经定义过了。
e:形参的名字,变量名
* */
public boolean add(E e){
obj[size] = e;
size++;
return true;
}
public E get(int index){
return (E)obj[index];
}
@Override
public String toString() {
return Arrays.toString(obj);
}
}
java
public class GenericsDemo2 {
public static void main(String[] args) {
/* MyArrayList<String> list = new MyArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list);*/
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);
}
}
泛型方法
当泛型只在一个方法中用到的时候,就没必要写成泛型方法了,写成泛型类就可以了,泛型写在修饰符的后面
java
package itheima.a04mygenerics;
import java.util.ArrayList;
public class ListUtil {
private ListUtil(){}
//类中定义一个静态方法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 static<E> void addAll2(ArrayList<E> list, E...e){
for (E element : e) {
list.add(element);
}
}*/
public void show(){
System.out.println("尼古拉斯·纯情·天真·暖男·阿玮");
}
}
java
package itheima.a04mygenerics;
import java.util.ArrayList;
/*
定义一个工具类:ListUtil
类中定义一个静态方法addAll,用来添加多个集合的元素。
*/
public class GenericsDemo3 {
public static void main(String[] args) {
ArrayList<String> list1 = new ArrayList<>();
ListUtil.addAll(list1, "aaa", "bbb", "ccc", "ddd");
System.out.println(list1);
ArrayList<Integer> list2 = new ArrayList<>();
ListUtil.addAll(list2,1,2,3,4);
System.out.println(list2);
}
}