JAVA基础总结(三) ---- 泛型
一、泛型的概念
E e:Element 元素 未知的元素类型
T t:Type 类型
在创建集合对象的时候,确定泛型的数据类型。将数据类型作为参数传递
二、不定义泛型
集合不定义泛型时,默认使用Object类型,可以存所有类型的数据
三、泛型的优点
- 避免使用Object时的类型转换
- 将运行期异常提升到了编译期
四、定义含有泛型的类
public class GenericClass<E> {
private E name;
public GenericClass(E name) {
this.name = name;
}
public GenericClass() {
}
public E getName(){
return name;
}
public void setName(E name){
this.name = name;
}
}
五、定义含有泛型的方法
public class GenericMethod {
public <T> void method(T t){
System.out.println(t);
}
//含有泛型的静态方法
public static <T> void smethod(T t){
System.out.println(t);
}
}
六、定义含有泛型的接口
创建:
public interface GenericInterface<I> {
public abstract void method(I i);
}
实现方法 2种:
//直接指定泛型类型
public class GenericInterfaceImpl implements GenericInterface<String> {
public void method(String s) {
System.out.println(s);
}
}
或者
//定义含有泛型的类
public class GenericInterfaceImpl2<I> implements GenericInterface<I> {
public void method(I i) {
System.out.println(i);
}
}
七、泛型的通配符
<?> 代表未知通配符,此时只能接收数据,不能存储数据public class GenericDemo {
public static void main(String[] args) {
ArrayList<Integer> list01 = new ArrayList<Integer>();
list01.add(1);
list01.add(2);
ArrayList<String> list02 = new ArrayList<String>();
list02.add("a");
list02.add("b");
printArray(list01);
printArray(list02);
}
public static void printArray(ArrayList<?> list){// 可以接收所有类型
Iterator<?> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
八、泛型的限定
- 泛型的上限限定 ? extends E 使用 的泛型只能时E的子类或本身
- 泛型的下限限定 ? super E 使用的泛型只能时E的父类或本身