泛型的作用是,允许类中属性、类中方法的参数和返回值在创建对象时动态决定,在类中用大写字母作为占位符(可以声明多个)。
泛型出现之后,一个类就可以处理多种数据类型。之前用Object也可以实现,但向下转型可能运行时发生ClassCastException,而泛型出错在编译时就能发现。
泛型只能处理引用数据类型,如包装类。
泛型通配符"?",允许接收任意泛型并获取其中数据(不允许修改)。还有额外功能 ,"? extends 类名"设置泛型的上限 , "? super 类名"设置泛型的下限。
下面是1个简单例子:
package package1;
public class Point<T> { //坐标类
private T x;
private T y;
public Point(){}
public Point(T x,T y){
this.x=x;
this.y=y;
}
public void setX(T x){
this.x=x;
}
public void setY(T y){
this.y=y;
}
public T getX(){
return this.x;
}
public T getY(){
return this.y;
}
}
package package1;
public class Main {
public static void main(String[] args) {
Point<Integer> pointA = new Point<>(); //指定数据类型只对当前对象生效
pointA.setX(5);
pointA.setY(10);
System.out.println("[整型坐标]横坐标为: " + pointA.getX() + " 、纵坐标为: " + pointA.getY());
Point<String> pointB = new Point<>();
pointB.setX("东经60度");
pointB.setY("北纬30度");
System.out.println("[字符串坐标]横坐标为: " + pointB.getX() + " 、纵坐标为: " + pointB.getY());
}
}
运行结果:
图片.png