您的位置:首页 > 编程语言

泛型的基本用法和代码演示

2012-11-30 01:07 225 查看

一、使用泛型可以使避免程序在运行时发生异常。

使用泛型可以避免程序在运行时发生异常,如在容器中,指定具体的类型。当在该容器中添加元素时如果类型不是该容器的指定类型,就回提醒错误。从而避免了没有指定类型在迭代输出运行时抛出异常,(ClassCastException)而且在迭代中不用做向下转型。

Collection<E> colobj = new Collection子类<E>(); Iterator<E> it = colobj.iterator();

package Generic;

import java.util.ArrayList;
import java.util.Iterator;

public class GenericTest {
/**
* @param args
*/
public static void main(String[] args) {
show1();
show2();
}

public static void show2() {
ArrayList<Person> al = new ArrayList<Person>();
al.add(new Person("wangcaiyihao",18));
al.add(new Person("xiaobai",12));
al.add(new Person("xiaohei",28));
//		al.add("skljrkwe");  会在编辑时提醒有错。

Iterator<Person> it =al.iterator();
while(it.hasNext()){
Person p =  it.next();
System.out.println(p.getName()+"  >><<  "+p.getAge());
}
}

public static void show1() {
ArrayList al = new ArrayList();
al.add(new Person("wangcaiyihao",18));
al.add(new Person("xiaobai",12));
al.add(new Person("xiaohei",28));
//		al.add("werer");//没有设置泛型,则不会提醒有错。

Iterator it =al.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p.getName()+" : "+p.getAge());
}
}

}



二、当实现迭代输出 在装有不同类型元素的不同类型容器的元素时,可以是用泛型中的'?'通配符。

'?'通配符的三种运用方法。

1,因为各种容器都实现了Collection<E>接口。所以在接受时可以用Collection作为形参类型。

函数 格式 : 函数修饰符 iteratorFuntion(Collection<?> colobj) {

.......

Iterator<?> itt = colobj.iterator();

..........

}

package Generic;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;

public class GenericTest2 {

/**
* @param args
*/
public static void main(String[] args) {
//ArrayList容器 String类型元素。
ArrayList<String> al = new ArrayList<String>();
al.add("first");
al.add("second");
al.add("thred");
al.add("fourth");
//HashSet容器,Integer类型元素
HashSet<Integer>  tss = new HashSet<Integer>();
tss.add(123);
tss.add(126);
tss.add(124);
//TreeSet容器,Person类型元素。
TreeSet<Person> ts = new TreeSet<Person>(new ComparatorByName());
ts.add(new Person("zhaosan",22));
ts.add(new Person("lisi",24));
ts.add(new Person("wangwu",21));
ts.add(new Person("xiaoliu",29));
iteratorFuntion(al);
iteratorFuntion(tss);
iteratorFuntion(ts);

}
public static void iteratorFuntion(Collection<?> tss) {
Iterator<?> itt = tss.iterator();
while(itt.hasNext()){
System.out.println(itt.next());
}
}

}


2,只接收E和E的子类。:上界

函数格式 函数修饰符 function(Collection<? extends E> colobj){

........

Iterator<? extends E> itt = colobj.iterator();

........

}

package Generic;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;

public class GenericTest2 {

/**
* @param args
*/
public static void main(String[] args) {
//ArrayList容器 String类型元素。
ArrayList<String> al = new ArrayList<String>();
al.add("first");
al.add("second");
al.add("thred");
al.add("fourth");
//HashSet容器,Integer类型元素
HashSet<Worker>  tss = new HashSet<Worker>();
tss.add(new Worker("work02",31));
tss.add(new Worker("work01",36));
tss.add(new Worker("work03",33));
//TreeSet容器,Person类型元素。
TreeSet<Person> ts = new TreeSet<Person>(new ComparatorByName());
ts.add(new Person("zhaosan",22));
ts.add(new Person("lisi",24));
ts.add(new Person("wangwu",21));
ts.add(new Person("xiaoliu",29));
//		iteratorFuntion2(al);报错因为al不是Person或Person子类。
iteratorFuntion2(tss);
iteratorFuntion2(ts);

}
public static void iteratorFuntion2(Collection<? extends Person> tss) {
Iterator<? extends Person> itt = tss.iterator();
while(itt.hasNext()){
System.out.println(itt.next());
}
}

}





3,只接收E和E的父类。:下界

函数格式 函数修饰符 function(Collection<? super E> colobj){

........

Iterator<? super E> itt = colobj.iterator();

........

}


package Generic;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;

public class GenericTest2 {

/**
* @param args
*/
public static void main(String[] args) {
//ArrayList容器 String类型元素。
ArrayList<String> al = new ArrayList<String>();
al.add("first");
al.add("second");
al.add("thred");
al.add("fourth");
//HashSet容器,Integer类型元素
HashSet<Worker>  tss = new HashSet<Worker>();
tss.add(new Worker("work02",31));
tss.add(new Worker("work01",36));
tss.add(new Worker("work03",33));
//TreeSet容器,Person类型元素。
TreeSet<Person> ts = new TreeSet<Person>(new ComparatorByName());
ts.add(new Person("zhaosan",22));
ts.add(new Person("lisi",24));
ts.add(new Person("wangwu",21));
ts.add(new Person("xiaoliu",29));
//		iteratorFuntion2(al);报错因为al不是Worker或Worker父类。
iteratorFuntion2(tss);
iteratorFuntion2(ts);

}
public static void iteratorFuntion2(Collection<? super Worker> tss) {
Iterator<? super Worker> itt = tss.iterator();
while(itt.hasNext()){
System.out.println(itt.next());
}
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: