泛型可以在编译时检测出程序的安全隐患,使用泛型技术可以使程序更加健壮,利用泛型可以解决ClassCastException问题
范例:在类定义上使用泛型
class Point<T> { // 坐标点,T属于类型标记,可以设置多个标记
private T x; // 保存x坐标
private T y; // 保存y坐标
public void setX(T x) { // 设置x坐标,类型由实例化对象决定
this.x = x;
}
public void setY(T y) { // 设置y坐标,类型由实例化对象决定
this.y = y;
}
public T getX() { // 获取x坐标,类型由实例化对象决定
return this.x;
}
public T getY() { // 获取y坐标,类型由实例化对象决定
return this.y;
}
}
public class JavaDemo {
public static void main(String args[]) {
// 实例化Point类对象,设置泛型标记“T”的目标数据类型,属性、方法参数、返回值的类型动态配置
Point<Integer> point = new Point<Integer>() ;
// 第一步:根据需求进行内容的设置,所有数据都通过Object接收
point.setX(10) ; // 自动装箱,必须是整数
point.setY(20) ; // 自动装箱,必须是整数
// 第二步:从里面获取数据,由于返回的是Object类型,所以必须进行强制性的向下转型
int x = point.getX() ; // 【避免强制转型】获取x坐标原始内容
int y = point.getY() ; // 【避免强制转型】获取y坐标原始内容
System.out.println("x坐标:" + x + "、y坐标:" + y) ;
}
}
范例:观察默认类型
public class JavaDemo {
public static void main(String args[]) {
// 实例化Point类对象,没有设置泛型类型,编译时将出现警告,默认使用Object类型
Point point = new Point() ;
// 第一步:根据需求进行内容的设置,所有数据都通过Object接收
point.setX(10) ; // 自动装箱,必须是整数
point.setY(20) ; // 自动装箱,必须是整数
// 第二步:从里面获取数据,由于返回的是Object类型,所以必须进行强制性的向下转型
int x = (Integer) point.getX() ; // Object强制转型为Integer后自动拆箱
int y = (Integer) point.getY() ; // Object强制转型为Integer后自动拆箱
System.out.println("x坐标:" + x + "、y坐标:" + y) ;
}
}