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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于JDK 1.5的Generics功能使用实例 - 编程入门网的所有评论