前言:
程序中,我们会经常使用变量,而使用变量时必须指明其类型,这样才能正常编译使用
假设一个情景:
表示一个地点的信息:
1.经度(字符串/小数) 2.纬度(字符串/小数) 3.地点名称(字符)
不同的数据类型,除了借助方法重载,也可以借助自动装箱(类型包装),转换为对应的包装类(Object类是所有类的父类)
eg: int-->Integer-->Object
char-->character-->Object
String-->Object
例:
public class Point {
Object x=0;
Object y=0;
public Object getX(){
return x;
}
public void setX(Object x){
this.x=x;
}
public Object getY(){
return y;
}
public void setY(Object y){
this.y=y;
}
}
在第13行报错,出现异常,即向下转时出错,所以应避免此类行为
正文:
以此来看是否可以既不重载,又可降低风险呢?,答案是肯定的(*^_^*)
泛型类
泛型:即广泛的类型,任意的数据类型
public class Point2{ //定义泛型类 T1 x; T2 y; public T1 getX(){ return x; } public void setX(T1 x){ this.x=x; } public T2 getY(){ return y; } public void setY(T2 y){ this.y=y; } } public class Demo02 { public static void main(String[] args) { //实例化泛型类 Point2 p1=new Point2 (); p1.setX(10); p1.setY(20); int x=p1.getX(); int y=p1.getY(); System.out.println("位置:"+x+","+y); Point2 p2=new Point2 (); p2.setY("东经120°"); p2.setX(26.3); Double m=p2.getX(); String n=p2.getY(); System.out.println("位置:"+m+","+n); } }
这样就解决了问题,与普通类的定义相比,泛型类在类名后加入
小结:
传值参数(我们通常所说的参数)由小括号包围,如 (int x, double y),类型参数(泛型参数)由尖括号包围,多个参数由逗号分隔,如
类型参数需要在类名后面给出。一旦给出了类型参数,就可以在类中使用了。类型参数必须是一个合法的标识符,习惯上使用单个大写字母,通常情况下,K 表示键,V 表示值,E 表示异常或错误,T 表示一般意义上的数据类型。
泛型类在实例化时必须指出具体的类型,也就是向类型参数传值,格式为:
className variable
也可以省略等号右边的数据类型,但是会产生警告,即:
className variable
因为在使用泛型类时指明了数据类型,赋给其他类型的值会抛出异常,既不需要向下转型,也没有潜在的风险,比本文一开始介绍的自动装箱和向上转型要更加实用。



