1.1说明
增强了java的类型安全,可以在编译期间对容器内的对象进行类型检查,在运行期不必进行类型的转换。而在j2se5之前必须在运行期动态进行容器内对象的检查:及转换
减少含糊的容器,可以定义什么类型的数据放入容器
ArrayList <整数> listOfIntegers;//新语法
整数integerObject;
listOfIntegers=new ArrayList <整数> ();//新到
listOfIntegers语法。(新添加整数(10));//只能是整数类型
integerObject=listOfIntegers.get (0);//取出对象不需要转换
1.2 (@more@)用法
声明及实例化泛型类:
HashMap <字符串,浮动>嗯=new HashMap <字符串,浮动> ();
//不能使用原始类型
GenList
J2SE 5.0目前不支持原始类型作为类型参数(类型参数)
定义泛型接口:
公共接口GenInterface {
void函数T (T);
}定义泛型类:
公共类ArrayList
公共类GenMap {…}
例1:
公共类MyList <元素>扩展LinkedList <元素>
{
公共空交换(int, int j)
{
元素temp=this.get(我);
。集(我this.get (j));
。集(j、临时);
}
公共静态void main (String [] args)
{
MyList <字符串> list=new MyList <字符串> ();
list.add(“嗨”);
list.add(“安迪”);
System.out.println (list.get (0) + " " + list.get (1));
list.swap (0,1);
System.out.println (list.get (0) + " " + list.get (1));
}
}例2:
公共类GenList {
私人T[]元素;
私人int大?0;
私人int长度=0;
公共GenList (int大小){
元素=(T[])新对象(大小);
。大?大小;
}
公共T (int i) {
如果(我<长度){
返回元素[我];
}
返回null;
}
公共空间添加(T e) {
如果(长度<大小- 1)
元素(长度+ +)=e;
}
}泛型方法:
公共类TestGenerics {
公共字符串getString (T obj) {
//实现了一个泛型方法
返回obj.toString ();
}
公共静态void main (String [] args) {
TestGenerics t=新TestGenerics ();s=
字符串“Hello”;
Integer=100;
System.out.println (t.getString (s));
System.out.println (t.getString(我));
}
}1.3受限泛型
受限泛型是指类型参数的取值范围是受到限制的。
扩展关键字不仅仅可以用来声明类的继承关系,
也可以用来声明类型参数(类型
参数)的受限关系。例如,
我们只需要一个存放数字的列表,包括整数(长整数,
),实数(双浮动),不能用来存放其他类型,
例如字符串(字符串),也就是说,
要把类型参数T的取值泛型限制在数量极其子类中。在这种情况下,
我们就可以使用扩展关键字把类型参数(类型
参数)限制为数字
示例
公共类有限{
公共静态void main (String [] args) {
<整数>数量有限;//正确
<字符串> str有限;//编译错误
}
}1.4泛型与异常
类型参数在catch块中不允许出现,但是能用在方法的抛出之后。例:
import . io . *;
界面执行人
无效执行()抛出E;
}公共类GenericExceptionTest {
公共静态孔隙主要(String参数[]){
尝试{
执行人
执行人
公共空间执行()抛出IOException {
//代码会抛出一个
//IOException或亚型
//IOException
}
};
e.execute ();
}捕捉(IOException埃克斯波特学院){
system . out。println (“IOException:“+埃克斯波特学院);
ioe.printStackTrace ();
}
}
}1.5泛型的通配符“?”
”?“可以用来代替任何类型,
例如使用通配符来实现印刷方法。
公共静态空白打印(GenList <?>列表){})
1.6泛型的一些局限型
不能实例化泛型
T T=new ();//错误
不能实例化泛型类型的数组
T [] ts=new T [10];//编译错误
不能实例化泛型参数数
对<字符串>表=[]副新的<字符串> (10);//错误
类的静态变量不能声明为类型参数类型
公共类GenClass {
私有静态T T;null