JAVA泛型的学习(1)

JAVA泛型的学习(1)

1.什么是泛型?

泛型(generic)可以参数化类型,使我们在定义带泛型类型的类或方法时,随后编译器会用具体的类型来替换它。

个人感觉与C++的模板很像。

2.为什么要用到泛型

使用泛型的动机就是可以在编译时检测出错误,使程序更加可靠,这么说可能没什么感觉,下面举个具体的小例子: 

JDK1.5以前的Comparable接口:

package java.lang

public interface Comparable {
        public int compareTo(Object o)
}
Comparable comparable = new Date();
System.out.println(comparable.compareTo("red"));

由于compareTo()方法接受的参数类型是Object类型,所以给它传一个String类型的参数,在编译阶段不会有问题,只有当程序在运行时,才会发现Date类型与String类型无法比较。而使用了泛型就不同了—— 

 JDK1.5以后的Comparable接口:

package java.lang

public interface Comparable<T> {
        public int compareTo(T o)
}
Comparable<Date> comparable = new Date();
System.out.println(comparable.compareTo("red"));

运用了泛型在实际编写时,程序员指明了compareTo()方法接受的参数为Date类型,在编译时发现它是String类型时就会编译通不过。

3.泛型可以用来干什么

定义泛型类和接口(如下定义一个泛型类的示例)

public class GenericStack<E> {
	private ArrayList<E> list = new ArrayList<>();
	
	public E peek() {
		return list.get(getSize() - 1);
	}
	
	public int getSize() {
		return list.size();
	}
	
	、、、
} 

注意:GenericStack的构造方法应该被定义为public  GenericStack()

有时,泛型类会有多个参数,用<E1,E2,E3>表示

可以定义一个类或接口作为泛型类或者泛型接口的子类型。例如,在JavaAPI中,java.lang.String 类被定义为实现Comparable接口,public class String implements Comparable<String> 

定义泛型方法 

public static <E> void print(E[] list) {
		for(int i = 0; i < list.length; i++) {
			System.out.println(list[i]);
		}
	}

猜你喜欢

转载自blog.csdn.net/zjx1230/article/details/86635797