泛型

/**
 * @author ksone
 * 泛型,又称为参数化类型
 * JDK1.5之后推出的一个特性
 * 泛型可以表示属性的类型,方法参数的类型以及返回值的类型
 */
public class Point<T> {
	private T x;
	private T y;
	public Point(T x, T y) {
		super();
		this.x = x;
		this.y = y;
	}
	public T getX() {
		return x;
	}
	public void setX(T x) {
		this.x = x;
	}
	public T getY() {
		return y;
	}
	public void setY(T y) {
		this.y = y;
	}
	@Override
	public String toString() {
		return "("+x+","+y+")";
	}
}

Test1

public class TestPoint {
	public static void main(String[] args) {
		Point<Integer> p1 = new Point<Integer>(1,2);
		Point<Double>  p2 = new Point<Double>(1.2,3.4);
		Point<String>  p3 = new Point<String>("tt", "kk");
	}
}

Test2

/**
 * @author ksone
 * 泛型是编译器认可,泛型的原型就是Object
 * 只是编译器会做一些工作
 * 1:当对泛型传入实参时,编译器会检查该值是否满足泛型指定的类型,不满足则编译不通过
 * 2:当获取泛型的值时,编译器会自动的做造型操作
 */
public class TestPoint2 {
	public static void main(String[] args) {
		/**
		 * 编译器会检查实参是否满足泛型的要求
		 * 这里只能传入整数
		 */
		Point<Integer> p1 = new Point<Integer>(1,2);
		p1.setX(4);
		/**
		 * 编译器在编译程序时会修改代码做转换
		 * int x = ((Integer)p1.getX()).intValue()
		 */
		int x1 = p1.getX();
		System.out.println(x1);
		
		/**
		 * 泛型若不指定,则是原型:Object
		 */
		Point p2 = p1;
		System.out.println(p2);
		p2.setX("er");
		System.out.println(p2);
		System.out.println(p2.getX());
		x1 = p1.getX();  //报错
		System.out.println(x1);
	}
}