泛型的意义:类型的参数化,就是可以把类型像方法的参数那样传递。
1、泛型只存在于编译期间
2、泛型在语法中的特征就是尖括号
3、泛型的核心原理:利用Object引用可以指向任意类型的对象
问题:Java中有些类型不是对象类类型咋办?
Java专门为8种基本类型定义了各自对应的类类型
int -> Integer char -> Character
其他的都是首字母大写即可
注:泛型的尖括号不可能出现基本类型
4、使用泛型
A<Strirng> a = new A <> ();
B<Strirng,String> b = new B <> ();
C<Random,Strirng,Random,Scanner> c = new C <> ();
5、以下代码加深理解:
//元素类型明确为long类型
public class MyArrayList1 {
private long[] array;
private int size;
public MyArrayList1(){
array = new long[10];
size = 0;
}
public void add(long e){
array[size] = e;
size++;
}
}
public class MyArrayList2<E> {
//在本类中可以把E当作一种类型来使用
private E[] array;
private int size;
public MyArrayList2(){
//泛型不允许定义数组
array = (E[]) new Object[10];
size = 0;
}
public void add(E e){
array[size] = e;
size++;
}
}
import java.util.Random;
public class UseMyArrayList {
public static void main(String[] args) {
MyArrayList1 list1 = new MyArrayList1();
list1.add(1);
list1.add(2);
//对于泛型来说,类型是在使用该类时才明确定义出来的
//<String> 用String赋值给定义 MyArrayList2 时的E
MyArrayList2<String> list2 = new MyArrayList2<String>();
list2.add("1");
MyArrayList2<Long> list3 = new MyArrayList2<Long>();
list3.add(1L);
MyArrayList2<Random> list4 = new MyArrayList2<>();
list4.add(new Random());
}
}