快速业务通道

JDK 1.5的Generics功能使用实例 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
cs);// T inferred to be String   fromArrayToCollection(sa, co);// T inferred to be Object   Integer[] ia = new Integer[100];   Float[] fa = new Float[100];   Number[] na = new Number[100];   Collection<Number> cn = new ArrayList<Number>();   fromArrayToCollection(ia, cn);// T inferred to be Number   fromArrayToCollection(fa, cn);// T inferred to be Number   fromArrayToCollection(na, cn);// T inferred to be Number   fromArrayToCollection(na, co);// T inferred to be Object   //test.fromArrayToCollection(na, cs);// 错误用法 } public <T> void fromArrayToCollection(T[] a, Collection<T> c) {   for (T o : a) {    //如果参数定义为 Collection< ? > c 以下写法错误    c.add(o); // compile time error   } } /** * generics 嵌套用法 * @param shapes */ public void drawAll(List< ? extends Shape> shapes) {   List<List< ? extends Shape>> history = new ArrayList<List< ? extends Shape>>();   history.add(shapes);   for (Shape s : shapes) {    s.draw();   } } /** * * */ public void Test4() {   List<String> l1 = new ArrayList<String>();   List<Integer> l2 = new ArrayList<Integer>();   System.out.print(l1.getClass() == l2.getClass());   //打印为 true, } /** * 错误用法 */ public void Test5() {   Collection cs = new ArrayList<String>();   //以下为错误用法   //if (cs instanceof Collection<String>) { } // illegal   //以下为警告用法   //Collection<String> cstr = (Collection<String>) cs; // unchecked   // warning } public void Test6() { //错误用法 //List<String>[] lsa = new List<String>[10]; // not really allowed List< ? >[] lsa = new List< ? >[10]; // ok, array of unbounded wildcard // type Object o = lsa; Object[] oa = (Object[]) o; List<Integer> li = new ArrayList<Integer>(); li.add(new Integer(3)); oa[1] = li; // correct //String s = lsa[1].get(0); // run-time error - ClassCastException //String s = lsa[1].get(0); // run time error, but we were warned String s = (String) lsa[1].get(0); // run time error, but cast is // explicit } public void Test7() {   Sink<Object> s = null;   Sink<String> s1 = null;   Collection<String> cs = null;   String str = writeAll(cs, s1);   //String str = writeAll(cs, s); // 无效调用   Object obj = writeAll1(cs, s); // 正确的调用   str = writeAll2(cs, s1); // 正确的调用 } public <T> T writeAll(Collection<T> coll, Sink<T> snk) {   T last = null;   for (T t : coll) {    last = t;    snk.flush(last);   }   return last; } public <T> T writeAll1(Collection< ? extends T> coll, Sink<T> snk) {   T last = null;   for (T t : coll) {    last = t;    snk.flush(last);   }   return last; } public <T> T writeAll2(Collection<T> coll, Sink< ? super T> snk) {   T last = null;   for (T t : coll) {    last = t;    snk.flush(last);   }   return last; } // 打印 private void log(Object ob) {  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号