泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型裸眼指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是安全简单。
泛型的定义。泛型可以解决数据类型的安全性问题,它主要的原理是在类声明的时候通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型,这样在类声明或实例化的时候只要指定好需要的类型即可。
1.泛型类的定义格式:
访问权限 class 类名称<泛型类型1,泛型类型2,...>{ 访问权限 泛型类型标识 变量名称; 访问权限 泛型类型标识 方法名称(){}; 访问权限 返回值类型声明 方法名称(){}; } public class Person<T1,T2>{ //此处指定了两个泛型类型 private T1 name; //此变量的类型由外部决定 private T2 age; //此变量的类型由外部决定 public T1 getName(){ return name; } public void setName(T1 name){ this.name=name; } public T2 getAge(){ return age; } public void setAge(T2 age){ this.age=age; }
2.泛型对象的定义格式:
类名称<具体类> 对象名称=new 类名称<具体类>(); public class GenericTest{ public static void main(String args[]){ Person<String,Integer> t = null; //定义两个泛型类型的对象 t = new Person<String,Integer>(); //里面的name为String, age为Integer t.setName("英雄"); //设置第一个内容的值 t.setAge(23); //设置第二个内容的值 System.out.println("姓名:"+t.getName()); //取得信息 System.out.println("年龄:"+t.getAge()); //取得信息 } }
3.构造方法应用泛型的格式:
访问权限 构造方法(<泛型类型> 参数名称){
......
}
说明:如果一个类中有多个属性需要使用不同的泛型声明,则可以在声明类的时候指定多个泛型类型。
泛型的作用。使用泛型可以解决数据安全问题,避免了类型转换异常的发生。
比较经下两个语句:
t = new Person<String,Integer>(); //里面的name为String,age为Integer
t = new Person<String,int>(); //里面的name为String,age为int
为什么不能用下面的替换上面的?
Note:
(1)在泛型的指定中是无法直接指定基本数据类型的,必须设置成一个类,因此在设置一个数字的时候就必须使用包装类。
(2)在泛型应用中最好在声明类的同时指定好其内部的数据类型,如“Info<String>”;如果不指定类型,用户在使用这样的类时就会出现不安全的警告信息。