/** * @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); } }