泛型第一发 #类泛型#
来源:互联网 发布:mastercam车床编程教程 编辑:程序博客网 时间:2024/06/09 18:02
泛型
泛型是一个安全机制。好处:一、从集合读取的数据不需要强转,能自动识别。二、把运行期的错误提前到编译期。
注意:当一个变量被声明为泛型时,只能被实例变量和方法调用,而不能被静态变量和方法调用。原因很简单,参数化的泛型是一些实例。静态成员是被类的实例和参数化的类所共享的,所以静态成员不应该有类型参数和他们关联。
下面是泛型类的代码实现:
主类:
package cn.hncu.generic.one;import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;import java.util.Iterator;import java.util.List;import cn.hncu.collection.Person;public class Demo1 {public static void main(String[] args) {//t1();//t2();t3();}//演示泛型的好处之一:没采用泛弄,对元素的处理不安全。泛型可以把运行期的错误提前到编译期public static void t1(){//List list = new ArrayList();//无泛型List<String> list = new ArrayList<String>();//无泛型list.add("aaaqqqq");list.add("abaqqqq");list.add("cccqqqq");//list.add(100); //无泛型时,此处不会报错,但有泛型时会报错。Iterator it = list.iterator();while(it.hasNext()){Object obj = it.next();String str = (String)obj;str = str.substring(1, 4);System.out.println(str);}}//演示泛型的好处之二:从集合中读取的数据不需要强转,能够自动识别public static void t2(){//List list = new ArrayList();//无泛型List<String> list = new ArrayList<String>();list.add("aaaqqqq");list.add("abaqqqq");list.add("cccqqqq");Iterator<String> it = list.iterator();while(it.hasNext()){//String str =(String) it.next();//无泛型,必须强转String str = it.next();//List有泛型,并且Iterator也加泛型,那么这里就不用强转.str = str.substring(2);System.out.println(str);}System.out.println("------------");for(Object obj:list){System.out.println(obj);}//※泛型的好处之二:从集合中读取的数据不需要强转,能够自动识别for(String str:list){System.out.println(str);}}/** * 我们自己在MySet中定义泛型,然后在此处进行调用测试 */public static void t3(){//List<String> list = new ArrayList<String>();//MySet set = new MySet();MySet<String> set = new MySet<String>();set.add("abc");//set.add(100);//泛型的好处1: 有泛型,这里出报编译错误//泛型的好处2:不用类型强转String str = set.popLast();System.out.println(str);MySet<Integer> set2 = new MySet<Integer>();set2.add(100);//set2.add("abc");//编译错误int i = set2.popLast();System.out.println(i);Collection<Person> col = new HashSet<Person>();col.add(new Person("Jack",20));}}集合类:
package cn.hncu.generic.one;public class MySet<E> { private Object[] objs= new Object[0]; public boolean contains(Object obj){ for(Object tmp: objs){ if(tmp.equals(obj)){ return true; } } return false; } public boolean add(E obj){ if(contains(obj)){ return false; } Object[] tempObjs = new Object[objs.length+1]; System.arraycopy(objs, 0, tempObjs, 0, objs.length); tempObjs[objs.length] = obj; objs = tempObjs; return true; } public E popLast(){ if(size()==0){ return null; } return (E) objs[size()-1]; } public Object[] getAll(){ return objs; } public int size(){ return objs.length; }}
0 0
- 泛型第一发 #类泛型#
- 第一发
- 试发第一帖
- 发第一篇文章
- 发第一贴
- 插画练习第一发
- 第一发博客
- 博客第一发
- 自学第一发!
- Log4J--日志第一发
- Android-->第一发
- nginx--第一发
- 统计学习第一发
- 第一发博客
- android学习第一发
- 2016第一发
- 试试第一发
- android开发第一发
- 阿里巴巴校招内推一面总结
- HDU2594 Simpsons’ Hidden Talents KMP
- php学习日记1 ----面向对象基础
- myeclipse 安装AspectJ插件
- CDN图片加速服务
- 泛型第一发 #类泛型#
- 如何让ARM板启动的时候就运行自己的QT程序
- Ubuntu14.04 定时任务 cron(crontab)
- 21 API-IO流(字符流(编码表,转换流,FileReader,FileWriter,BufferedReader,BufferedWriter),IO流总结)
- 最详细的Log4j使用教程-http://www.codeceo.com/article/log4j-usage.html
- css3,js动画初体验
- [LeetCode]Single Number III
- 100-200的质数
- 女朋友想要分手了,咱们怎么办?