当前位置: java基础教程 > 10-集合框架 > 阅读正文

泛型概念 与 语法

2021.9.3.   559 次   1158字

1.泛型概念

当存储的类型比较大,比如是 Object 类型时,可以使用泛型向下指定

配合 Object, 泛型可以很方便的指定某种数据类型

官方并没有对泛型准确的定义,这里做一个定义

泛型的概念:泛型是限定数据类型的一种手段

2.泛型的语法

1泛型类的定义

在类后面加一个<E>,并且把属性和方法定义为 E 类型

在创建类的时候,确定E的数据类型,如果不写,默认是 Object

public class GeneClass<E>{
  private E name;
  public E getName(){
    return name;
  }
  public void setName(E name){
    this.name = name;
  }
}
2.泛型方法的定义

在返回值类型前,在static 后的位置,加上<E>

在调用方法时,确定传递的数据类型,默认是 Object

public <M> void method1(M m){
  System.out.println(m);
}
public static <S> void method2(S s){
  System.out.println(s);
}
3.泛型接口的定义

分别有接口类本身 和 实现类的泛型定义

//接口类本身的定义
public interface  Iterator<E>{
  E next();
}
//实现类在实现时指定泛型
public final class Scanner implements Iterator<String>{
  public String next(){}
}

//实现类本身定义和使用接口的泛型,此时必须使用相同的字母
public class ArrayList<E> implements List<E>{
  public boolean add(E e){}
  public E get(int index){}
}
4.泛型的通配符 “?”

通配符 ? 代表任意数据类型

无法创建对象使用,只可以使用方法时传递参数使用

public static void printArray(ArrayList<?> list){
  Iterator<?> it = list.iterator();
  while(it.hasNext()){
    Object o = it.next();
    System.out.println(o);
  }
}
5.泛型的上限和下限限定

使用 ? extends E ,表示 E 是父类,? 只能是子类(或者它本身)

使用 ? super E ,表示 ? 是父类(或者它本身),无法使用子类

//泛型的上限?必须是Number类型或者Number类型的子类
public static void getElement1(Collection<? extends Number> coll){}
//泛型的下限?必须是Number类型或者Number类型的父类
public static void getElement2(Collection<? super Number> coll){}

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群