泛型机制:本质为参数化类型,在类、接口和方法的定义过程中,所操作的数据类型通过传入的参数进行指定。在jdk1.5添加的新特性。
①创建集合对象时可以直接指定放入集合中的元素类型
②java编译器可以根据此类型进行检查,可减少代码在运行时出现错误的可能性
例一: //自定义一个集合类型:MyArrayList
package com.hyxy.collection;
import java.util.Arrays;
public class MyArrayList {
Object[] arr;
public MyArrayList() {
arr=new Object[8];
}
public void add(Object obj) {
for(int i=0;i<arr.length;i++) {
if(arr[i]==null) {
arr[i]=obj;
break;
}
}
}
}
//测试
package com.hyxy.collection;
import java.util.Arrays;
public class TestMyArrayList {
MyArrayList my=new MyArrayList();
my.add(new Integer(1));
my.add("1")
Object obj1=my.get(0);
if(obj1 instanceof Integer){
Integer in1=(Integer)Obj1
int a=in1.intValue();
System.out.println(a);
}
Object obj2=my.get(1);
if(obj2.getClass().getName()=="".getClass().getName()){
String s=(String)obj2
System.out.println(s.length());
}
}
结果为:1
3
总结:如上所示,如果不使用泛型,那么集合就必须使用object类型,那么在调用集合元素的方法时就必须要向 下转型,使用起来极其不方便。
例二://自定义一个带泛型的集合类型:MyArrayList<E>
package com.hyxy.collection;
import java.util.Arrays;
public class MyArrayList<E> {
Object[] arr;
public MyArrayList() {
arr=new Object[8];
}
public void add(E e) {
for(int i=0;i<arr.length;i++) {
if(arr[i]==null) {
arr[i]=e;
break;
}
}
}
public E get(int index) {
return (E)arr[index];
}
}
//测试:
package com.hyxy.collection;
import java.util.Arrays;
public class TestMyArrayList {
MyArrayList<String> mal=new MyArrayList<String>();
mal.add("a");
//mal.add(new Integer(1));
//此处会出现编译时异常,因为所添加元素类型与集合内元素类型不符
String s=mal.get(0);
System.out.println(s.length());
}
结果为:1
总结:如果加入了泛型,在获取集合内元素后就可以直接调用该类型的方法,而不用去向下造型,很方便而且也 可以避免一些错误
例三:
package com.hyxy.collection;
public class Person<P,V> {
P p;
V v;
public Person(P p,V v) {
this.p=p;
this.v=v;
}
public P getP() {
return p;
}
public void setP(P p) {
this.p = p;
}
public V getV() {
return v;
}
public void setY(V v) {
this.v = v;
}
@Override
public String toString() {
return "Person [x=" + p + ", y=" + v + "]";
}
}
//测试:
package com.hyxy.collection;
public class TestMyArrayList {
public static void main(String[] args) {
Person<String,Double> p1=
new Person<String,Double>("张三",10086.0);
Person<String,Double> p2=
new Person<String,Double>("李四",1008611.0);
MyArrayList<Person<String,Double>> my=
new MyArrayList<Person<String,Double>>();
my.add(p1);
my.add(p2);
System.out.println(my);
Person<String,String> p3=
new Person<String,Double>("中国","长春");
//my.add(p3);会出现编译时错误,不符合泛型机制
}
}
结果为:MyArrayList [arr=[Person [x=张三, y=10086.0], Person [x=李四, y=1008611.0], null, null, null, null, null, null]]
总结:通过三个例子我们可以更清楚的了解泛型究竟是什么样及其如何使用。(此三个例子只为了讲解泛型如何工作及其使用,对应测试类可能不尽完美。)