一 、泛型的基本应用
泛型可以解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中的某个属性的类型或者是某个方法的返回值及参数类型
二 、泛型的定义
//泛型类的定义,例如:
class Point<T> //T 表示此类型由外部调用本类时指定,这里使用任意字母都可以,之所以用 T,是因为T是type的缩写,表示类型,比较好理解
//泛型对象的定义,例如:
Point<String> p = new Point<String>(); //指定String数据类型
三 、使用泛型修改坐标类Point
class Point<T>{
private T x ; // 表示X坐标
private T 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 ;
}
};
public class GenericsPoint{
public static void main(String args[]){
Point<Integer> p = new Point<Integer>() ;
p.setX(10) ; // 利用自动装箱操作:int --> Integer
p.setY(20) ; // 利用自动装箱操作:int --> Integer
int x = p.getX() ; // 自动拆箱
int y = p.getY() ; // 自动拆箱
System.out.println("整数表示,X坐标为:" + x) ;
System.out.println("整数表示,Y坐标为:" + y) ;
}
};
程序运行结果:
当设置的内容与指定的类型不一致时,编译将发生错误
public class GenericsPoint{
public static void main(String args[]){
Point<Integer> p = new Point<Integer>() ;
p.setX(10) ; // 利用自动装箱操作:int --> Integer
p.setY("北纬220度") ; // 编译错误
int x = p.getX() ; // 自动拆箱
int y = p.getY() ; // 自动拆箱
System.out.println("整数表示,X坐标为:" + x) ;
System.out.println("整数表示,Y坐标为:" + y) ;
}
};
四 、使用泛型使程序操作更加安全
提问:为什么使用泛型,而不使用Object类接收对象?
回答:使用泛型将使程序的操作更加安全
使用Object类接收对象时,当设置的内容与指定的类型不一致,程序 运行 发生类转换异常
使用泛型时,当设置的内容与指定的类型不一致,程序 编译 不通过
五 、泛型应用中的构造方法
class Construction<T>{
private T name;
public Construction(T name){
this.name = name;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}
public class ConstructionDemo {
public static void main(String[] args) {
Construction<String> cst = new Construction<String>("hello");
System.out.println(cst.getName());
}
}
程序运行结果:
六 、指定多个泛型类型
class Person<S,I>{
private S name;
private I age;
public Person(S name, I age) {
this.name = name;
this.age = age;
}
public S getName() {
return name;
}
public void setName(S name) {
this.name = name;
}
public I getAge() {
return age;
}
public void setAge(I age) {
this.age = age;
}
}
public class GenericsDemo05 {
public static void main(String[] args) {
Person<String,Integer> per = new Person<String,Integer>("Java",20);
System.out.println("姓名:" + per.getName() + " 年龄:" + per.getAge());
}
}
程序运行结果: