首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java泛型学习2:解惑通配符

2012-10-17 
java泛型学习二:解惑通配符package genericimport java.awt.Canvasimport java.util.ArrayListimport j

java泛型学习二:解惑通配符

package generic;import java.awt.Canvas;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;public class Wildcard {// 打印集合c中所有的元素public static void printCollection(Collection c) {Iterator i = c.iterator();for (int k = 0; k < c.size(); k++) {System.out.print(i.next());}}public static void printCollectionWithGeric(Collection<Object> c) {for (Object e : c) {System.out.print(e);}}public static void printCollectionWithWildGeric(Collection<?> c) {for (Object e : c) {System.out.print(e);}}public static void main(String args[]) {/* * 一、method(Collection c)与method(Collection<Object> c)的区别 * method(Collection c):调用参数据可以为Collection的子类,且对Collection中元素的类型没有限制。 * method(Collection<Object> * c):调用参数可以为Collection的子类,但Collection中元素的必须为Object类型,不能是Object类型的子类型。 */List l = new ArrayList();l.add("aa");l.add("bb");Wildcard.printCollection(l);// result:aabbWildcard.printCollectionWithGeric(l);// result:aabb// 1、参数类型匹配,泛型中的值为子类。Collection<String> l1 = new ArrayList<String>();l1.add("l1-aa");l1.add("l1-bb");//Wildcard.printCollectionWithGeric(l1);//complie error:The method// printCollectionWithGeric(Collection<Object>) in the type Wildcard is// not applicable for the arguments (Collection<String>)// 2、参数类型匹配,泛型中的类型也匹配Collection<Object> l2 = new ArrayList<Object>();l2.add("l2-aa");l2.add("l2-bb");Wildcard.printCollection(l2);// result:l2-aal2-bbWildcard.printCollectionWithGeric(l2);// result:l2-aal2-bb// 3.参数类型为子类,泛型中的类型匹配List<Object> l3= new ArrayList<Object>();l3.add("l3-aa");l3.add("l3-bb");Wildcard.printCollectionWithGeric(l3);// result: l3-aal3-bbSystem.out.println("--------");/* * 二、method(Collection c) 与method(Collection<?> c)的区别  * method(Collection c):调用参数据可以为Collection的子类,且对Collection中元素的类型没有限制。 * method(Collection<?> c):完全与method(Collection c)一样 */// 1、参数类型匹配,泛型中的值为子类。Collection<String> l11 = new ArrayList<String>();l11.add("l11-aa");l11.add("l11-bb"); Wildcard.printCollectionWithWildGeric(l11);//result:l11-aal11-bb// 2、参数类型匹配,泛型中的类型也匹配Collection<Object> l22 = new ArrayList<Object>();l22.add("l22-aa");l22.add("l22-bb");Wildcard.printCollectionWithWildGeric(l22);// result:l22-aal22-bb// 3.参数类型为子类,泛型中的类型匹配List<Object> l33 = new ArrayList<Object>();l33.add("l33-aa");l33.add("l33-bb");Wildcard.printCollectionWithGeric(l33);// result: l33-aal33-bb// 泛型通配符 Collection<?> 表示集合中的元素可以为任何类型Collection<?> c = new ArrayList<String>();//c.add("aa"); // compile error:The method add(capture#2-of ?) in the type Collection<capture#2-of ?> is not applicable for the arguments (String)//说明: Collection<?> c :这种定义除了null不能加入任何元素,因为Collection没有指定元素类型}}

?

热点排行