13.2.2定义泛型类
Object类为最上层的父类,很多程序员为了让程序更为通用,设计程序的时候通常使用传入的值与返回的值都已Object类型为主。当需要使用这些实例的时候,必须正确地将该实例转换为原来的实例,否则在运行是会发生ClassCastException异常
为了预防这种问题 java提供了泛型机制
类名 <T>
其中T是泛型地名称 , 代表了某一种类型。开发者在创建该类对象时 需要制定T代表了具体哪种类型,如果不指定的话 T则采用了Object类型
如以下代码所示
package 第十三章;
public class Book <T>{
private T booklnfo;
public Book(T booklnfo) {//参数为类型参地构造方法
this.booklnfo =booklnfo;//给消息赋值
}
public T getBooklnfo() {
return booklnfo;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Book<String>bookName = new Book<String>("《java从入门到退学》");
//创建String类型的书名
Book<String>bookAuthor = new Book<String>("明日科技");
//创建String类型的作者
Book<Double>bookPrice = new Book<Double>(69.8);
//创建Double类型的价格对象
Book<Boolean>hasSource = new Book<Boolean>(true);
//创建boolean类型判断是否赋值源代码
System.out.println("书名:"+bookName.getBooklnfo());//然后依次输出
System.out.println("作业:"+bookAuthor.getBooklnfo());
System.out.println("价格:"+bookPrice.getBooklnfo());
System.out.println("是否附赠源码:"+hasSource.getBooklnfo());
}
}
代码图 以及运行结果图
代码中一共new了四个对象 两个 String类型 一个double类型 一个boolean类型 依次定义 然后输出 使用泛型定义额类在生命该类对象时 可以根据不同地需求指定<T>真正地类型 ,而是在使用类中的方法传递或返回 数据类型时将不再进行类型转换操作,而是使用在生命泛型类对象是“<>”符号中设置数据类型
13.2.3 泛型的常规用法
1. 在定义泛型类时,可以声明多个类型 代码如下
class MyClass<T1,T2>{}
其T1,T2是可以背定义的类型
这样的话既可以一下实例化多个类型 代码如下
MyClass<Boolean,Float> m = new MyClass <Boolean,Float>();
2. 定义泛型类 时声明数组类型 代码如下
package 第十三章;
public class ArrayClass <T>{
private T[]array;//创建泛型的数组v
public T[]getArray(){//使用get方法来读取
return array;//返回array
}
public void steArray(T[]array) {//使用set方法
this.array=array;//this关键字给array赋值
}
public static void main (String[]args) {
ArrayClass<String>demo=new ArrayClass<String>();//创建泛型为String类型的独享
String value[]= {"成员1","成员2","成员3","成员4","成员5",};//添加数据
demo.steArray(value);
String array[] = demo.getArray();//使用get方法读取读取然后一次遍历输出
for(int i = 0;i<array.length;i++) {//循环遍历出数组中的数据
System.out.println(array[i]);
}
}
}
代码图 以及运行结果图
3.集合类声明容器的元素
JDK中的集合接口,集合类都被定义了泛型,其中List<E>的泛型E实际上就是element元素的首字母Map<K,V>的泛型 K和V就是key键和value键的首字母。常用的被泛型化的集合类如下
表13.2常用的被泛型化的集合类