转载

java泛型浅析

为什么要使用泛型?

设想你有很多数字要进行排序,你选择把数字先放到下面的集合中

ArrayList list = new ArrayList();

你当然可以往里面加数字,但你添加字符串编译时也不报错,可是list里面有字符串显然不是你想见到的。

list.add("hello");

JVM虚拟机在执行排序时当然无法把数字与字符串排序,会产生一个运行时错误,这使你无法完成对数字的排序。要是能在编译时就发现错误就好了,怎么实现呢?面对这个问题jdk1.5提出的泛型发挥了作用,如下创建集合list即可。<Integer>限制了集合中只能存放Integer类型的数据,此时你添加字符串编译就会报错。

ArrayList<Integer> list = new ArrayList<>();

可以说,使用java泛型的动机就是在编译时检测出错误。

下面来谈谈怎样使用泛型类、泛型接口、泛型方法。一般用<T>表示泛型,T可以是广泛的任意类型的数据。

泛型类

public class myFanXing<E>{
  private int name;
  private ArrayList<E> list = new ArrayList<>();
  
  public myFanXing(){//构造方法不带泛型
  }
  }

泛型接口

public calss male<T>{
   public T eat();
}

泛型方法

我们在上面的泛型类中写一个泛型方法

其中<T>标记此方法为泛型方法,T表明方法返回T类型的数据,do(T t)表明需要给方法传递T类型的参数。

public class myFanXing<T>{
  public static <T> T do(T t){
  //方法体
  }
  }

泛型通配符

上面的尖括号<>中还可以放以下3种形式的符号

<?> 非受限通配 它可以表示任何一种对象类型

<? extends T> 它可表示a或a的子类型的通配类型。

<? super T> 它表示T的父类型

原文  https://segmentfault.com/a/1190000022061780
正文到此结束
Loading...