泛型机制:为了预防类型转换的问题,将类型明确的工作推迟到创建对象或者调用方法的时候
定义泛型类:
语法: 类 名 < T >
注:T为任意字母
其中,T是泛型的名称,代表某一种类型,如果没有指定具体类型,则T是Object类(任意类)
创建带泛型T的Book类,用T声明一个成员变量bookinfo。创建不同的Book对象,分别将bookinfor指定为需要的类型
class Book<T>{ //定义带泛型的Book<T>类
private T bookinfor; //类型形参:书籍信息
public Book (T bookinfor){ //参数为类型形参的构造函数
this.bookinfor = bookinfor; //为书籍类型形参赋值
}
public T getBookinfor() { //获取书籍信息的值
return bookinfor;
}
}
public class FanXing <T>{
public static void main(String[] args) {
//创建参数类型为String的书名对象
Book<String> bookname = new Book<>("Java学习");
//创建参数类型为String的作者对象
Book<String> bookAuthor = new Book<String>("Java大佬");
//创建参数类型为Double的价格对象
Book<Double> bookPrice = new Book<Double>(67.7);
//控制台输出书名、作者、价格
System.out.println("书名:"+bookname.getBookinfor());
System.out.println("作者:"+bookAuthor.getBookinfor());
System.out.println("价格:"+bookPrice.getBookinfor());
}
}
输出结果:
书名:Java学习
作者:Java大佬
价格:67.7
由此可见,使用泛型定义的类在声明该类对象时可以根据不同的需求指定真正的类型
定义泛型类时声明多个类型
语法:
class Myclass<T1,T2>{ }
Class Myclass<String,Integer>{ }
…………
Myclass myclass<String,Integer> = new Myclass<String,Integer>;
限制泛型可用类型
语法:
class 类名称< T extends anyClass >
Class Myclass<T Extends anyClass>{ }
其中,anyClass指某个接口或类
使用泛型限制后,泛型类的类型必须实现或者继承anyClass这个接口或类
泛型在集合中的应用
以ArrayList为例
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建集合
ArrayList <Integer> list =new ArrayList<Integer>();
list.add (1);
list.add(2);
list.add(3);
// 新建迭代器
Iterator iterator= list.iterator();
// 遍历集合
while (iterator.hasNext())
{
Object obj=iterator.next();
System.out.println(obj);
}
}
}
运行结果:
1
2
3