您的位置:首页 > 编程语言 > Java开发

Java泛型详解

2017-06-08 12:08 316 查看

为什么要用泛型?

  泛型程序的设计主要是为了编写的代码可以被不同的对象重用

  最简单的例子就是ArrayList。我们不能为每个对象写一个ArrayList,为了适用于所有对象,ArrayList被设计为泛型类。有人说不用泛型,用Object不就可以了?但是用Object,意味着在具体对象面前你又要强制类型转换。

泛型类

  泛型类就是又一个或多个类型变量的类。

  下面定义一个泛型的坐标类。

public class Point<T> {

private T x;

private T y;

public T getX() {
return x;
}

public void setX(T x) {
this.x = x;
}

public Point(T x, T y) {
this.x = x;
this.y = y;
}

public Point() {
}
}


View Code
  这样我们可以传入自己需要的类型,如:

Point<Integer> point1 = new Point<>(1,1);
Point<Float> point2 = new Point<>(1f,1f);


泛型方法

  泛型方法是指带有类型参数的方法。

class ArrayUtil{
public static <T> T getMiddle(T[] array){
return array[array.length/2];
}
}


泛型接口

  泛型接口和泛型类用法一样,如:

public interface JavaBeanCRUD<T> {

T getObjectById(String id);

void addObject(T obj);

void delObjById(String id);

void updateObj(T obj);
}


public interface StudentDao extends JavaBeanCRUD<Student> {
}


public class StudentDaoImpl implements StudentDao {
@Override
public Student getObjectById(String id) {
return null;
}

@Override
public void addObject(Student obj) {

}

@Override
public void delObjById(String id) {

}

@Override
public void updateObj(Student obj) {

}
}


  简单的例子我们能看到泛型确实给我们减少了代码的重写。

类型变量的限定

   如果我们需要写一个方法,实现获取集合中最大值,即用到compareTo接口。我们可以用extends限制变量的类型。如:

public static <T extends Comparable> T getMax(T[] array){
if(array==null || array.length==0)
return null;
T max = array[0];
for(T temp : array){
if(max.compareTo(temp)<0)
max = temp;
}
return max;
}


  extends这里不再是我们熟悉的继承的意思了。这里约束了getMax这个方法传入的对象必须继承Comparable,否则会有编译上的错误。

  一个类型变量或通配符可以有多个限定,限定之间用 ‘&’ 分开即可,如:

  T extends Comparable & Serializable


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: