`

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:aabb
		Wildcard.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-bb
		Wildcard.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-bb
		System.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没有指定元素类型
		

	}

}

 

分享到:
评论

相关推荐

    Java解惑.pdf

    Java编程语言是世界上最流行的开发平台之一,广泛应用于企业级应用、...通过深入学习和理解这些Java知识点,并结合"Java解惑.pdf"文档中的实例和解决方案,开发者可以更好地解决实际开发中遇到的问题,提升编程技能。

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...

    Java解惑(中文).pdf

    8. **泛型**:Java泛型引入了类型安全,增强了代码的可读性和可维护性。书中会探讨泛型的基本概念,通配符,以及在设计API时如何有效地使用泛型。 9. **模块化系统**:Java 9引入了模块系统(Project Jigsaw),...

    2010年-Java解惑(中文)

    通过《Java解惑(中文)》的学习,开发者不仅可以解决实际开发中遇到的问题,还能深化对Java语言的理解,提升编程能力。这份资源集合理应包含了上述各个方面的实例和解析,帮助你在Java的世界里游刃有余。

    JAVA解惑

    13. **Java泛型**:理解泛型的引入和使用,以及泛型通配符和边界。 14. **枚举和注解**:介绍枚举类型的应用,以及注解的作用和自定义注解。 15. **Java 8新特性**:讲解Lambda表达式、函数式接口、Stream API等...

    Java解惑

    6. **泛型**:泛型为类型安全提供了保障,理解其边界、通配符和类型擦除原理,可以编写更灵活且易于维护的代码。 7. **设计模式**:单例、工厂、观察者、装饰器等设计模式在Java中的应用,有助于解决常见软件设计...

    java解惑java解惑java解惑

    "Java解惑"这个主题,显然旨在帮助开发者解决他们在学习和实践中遇到的问题。在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **...

    JAVA面试题解惑系列

    5. **泛型**:了解泛型的用途,如何声明泛型类、泛型方法,以及通配符和边界限制的使用。 6. **多线程**:理解线程的基本概念,如Runnable接口和Thread类,以及同步机制(synchronized关键字、wait/notify、Lock...

    java解惑--疑难问题解疑

    本文将针对"java解惑--疑难问题解疑"的主题,对一些常见的Java疑难问题进行详细解析,旨在帮助初学者更好地理解和解决这些问题。 1. **内存管理与垃圾回收**:Java通过自动垃圾回收机制来管理内存,这为开发者减轻...

    java解惑99

    在“java解惑99”这个主题中,我们可以深入探讨一系列关于Java编程的常见问题和解决方案。这个压缩包文件包含了作者个人对Java编程难题的源码解析和分析,旨在帮助开发者们解决他们在学习和实践中遇到的困难。让我们...

    java解惑(最具影响力的JAVA书籍)

    书中会讲解泛型的基本用法,如类型参数、通配符、类型擦除以及泛型与集合的关系。 9. **枚举与注解**:枚举类型是Java中一种特殊的类,用于表示固定数量的值。注解则提供了一种元数据的方式,可以在编译时或运行时...

    Java解惑(帮你深入地了解Java)

    "Java解惑"的主题旨在帮助开发者解决在学习和实践中遇到的复杂问题,加深对Java的理解。下面将详细探讨一些常见的Java知识点,以解答可能出现的疑惑。 1. **内存管理与垃圾回收**:Java通过自动垃圾回收机制管理...

    java 解惑,很不错。

    10. **泛型**:泛型的引入,类型参数化,通配符,以及泛型在集合、方法、接口中的应用。 11. **注解(Annotation)**:自定义注解的创建和使用,以及元注解的应用。 12. **模块系统(Java 9及以上)**:模块化的...

    java解惑 - 最后的笑声

    《Java解惑——最后的笑声》是一篇深入探讨Java编程中常见问题和陷阱的文章,作者在ITEYE博客上分享了其对Java的理解和实践经验。这篇文章主要聚焦于那些初学者或经验丰富的开发者都可能忽视的细节,帮助我们提高...

    解决java中的疑惑

    在Java编程语言中,有很多细节和特性可能会让初学者感到困惑。本文将深入探讨几个常见的问题,以帮助初学者更好地理解和..."JAVA解惑.pdf"这份文档很可能详细阐述了这些问题,建议仔细阅读,以便更好地理解Java编程。

    Java91个迷惑的问题

    9. **泛型**:泛型用于创建可以处理多种类型的类、接口和方法,理解类型擦除和边界通配符。 10. **JVM内部机制**:包括类加载器、栈帧、方法区、堆内存等,理解这些对于优化代码和排查问题至关重要。 11. **接口与...

    Java 解惑(细致实用)

    本篇将基于“Java解惑”这一主题,详细探讨Java中的常见问题、易错点以及需要注意的细节。 1. **内存管理与垃圾回收** - Java的自动内存管理机制是通过垃圾回收(Garbage Collection, GC)来实现的。理解如何工作...

Global site tag (gtag.js) - Google Analytics