泛型的基本用法和代码演示
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());
}
}
}
相关文章推荐
- 查找与替换的基本代码用法之一(VBA)
- C# KeyValuePair 的基本用法及结合泛型的用法
- Android 属性动画基本用法之代码实现
- 第一行代码:线程的基本用法总结
- 查找与替换的基本代码用法之二(VBA)
- 第一行代码笔记9(通知的基本用法)
- 通过 DAOFactory 的泛型写法来演示Java泛型的特殊用法
- Android Volley入门到精通:初识Volley的基本用法(示例,出错代码)
- 第一行代码阅读笔记----显示隐式Intent的基本用法
- 查找与替换的基本代码用法之三(批量替换) (VBA)
- 第一行代码 第10章 服务 -- 基本用法
- RxJava实战演示1------基本代码使用
- 第一行代码阅读笔记----显示隐式Intent的基本用法
- BufferedWriter 和 BufferedReader 的基本用法,附演示程序
- 查找与替换的基本代码用法之四-全文件夹替换 (VBA)
- 第一行代码阅读笔记----显示隐式Intent的基本用法
- delphi的泛型演示代码
- Volley学习笔记(一):初识Volley的基本用法(示例,出错代码)
- Linux环境下iptables防火墙基本用法演示
- C# KeyValuePair 的基本用法及结合泛型的用法