Java通配符主要用来解决泛型设计中类型约束中继承概念所导致的限制,原因则是Java泛型中,可以为各种容器和集合来添加类型约束用来获取类型检查功能避免导致错误的类型再程序运行时才会被发现出来。但是却有产生了一些另人烦恼的限制,比如为了保证类型的安全一个Pair<Employee>对象是一个Pair<Manager>将不会有任何关联,也就是说不能将Pair<Employee>和Pair<Manager>指向同一个引用,(当然如果说声明了Pair<Employee>对象需要把1个Manager对象存储到其中这样子是可以允许的不会出现错误,因为毕竟1个Manager也是1个Employee)。所以在这种情况下就需要使用通配符来放宽这样的限制
通配符可以用来实现以下2个语法 <? Super Manager>和<? Extends Employee> 前者的含义为保存在容器中的对象可以为Manager的任何父类,或者是任何Manager实现的接口。
而后者则相反为必须继承了Employee的子类或者是实现了Employee的子类型。而这2个语法各支持1种操作,<? Super Manager>支持对数据域的修改,而<? Extends Employee> 则支持对数据域的访问,上面这2个功能个人感觉可以用面向对象程序设计中的继承和多态来解释和理解。个人理解的含义就是如果使用<? Super Manager>父类中的数据域同时也会在子类中拥有,所执行提供参数的功能时不会出现任何问题,也就是说不会出现访问一个在父类中不存在的数据域的情况,而如果使用<? Extends Employee>子类中包含了父类的所有数据域所有可以实现访问的功能。
总之对这2个语法的理解可以为,父类限定通配符可以向泛型对象进行写入,而子类限定通配符则可以向泛型对象读取。
最后通配符的一个应用的语法可以为Employee<?>,该语法虽然形式上可能和不带泛型的对象相同,但是任何时Employee<?>都要比不带泛型的对象要更好,同时在一些简单的情况下使用这样的语法可以实现一些比使用普通语法更简便和可读性更强的版本
分享到:
相关推荐
泛型是Java编程中的一种重要特性,它在Java SE 5.0版本中被引入,大大增强了类型安全性和代码的可读性。泛型的主要目的是允许在编译时期进行类型检查,防止在运行时出现类型转换异常(如ClassCastException)。在...
总结,Java泛型技术的发展极大地提升了Java编程的效率和安全性。它通过编译时检查和类型安全保证,帮助开发者编写出更加健壮和易于维护的代码。理解并熟练掌握Java泛型,是每一个Java开发者必备的技能。
5. **泛型通配符**:?通配符用于表示任意类型。例如,`List<?> list = new ArrayList();` 这里的?表示list可以接受任何类型的列表。上限通配符`<? extends T>`和下限通配符`<? super T>`则限制了可以使用的具体类型...
总结来说,泛型是Java语言中一项强大的特性,它通过在编译时期提供类型安全检查,提高了代码的安全性和健壮性。泛型的引入极大地简化了Java集合框架的使用,并使得泛型类和接口的定义更加灵活和强大。
在Java泛型出现之前,集合框架(如ArrayList、HashMap等)都是基于Object设计的,这导致了在存储和取出对象时需要进行强制类型转换。泛型的引入使得程序员在定义集合时就可以指定元素类型,编译器会在编译时进行类型...
根据提供的文件信息,“Java核心技术 卷II 高级特性 原书第10版 中文版”,我们可以推测这本书主要涵盖了Java高级特性的相关内容。由于实际的书籍内容无法直接访问,我们将基于标题、描述和部分可见的内容来推断并...
泛型是Java语言的核心特性之一,它允许在定义类、接口和方法时使用类型参数,这个类型参数在使用的时候可以被具体化。这意味着程序员可以为算法编写与类型无关的代码,提高代码复用性。泛型可以应用于集合框架、...
5. 泛型通配符:`?`代表任意类型,但通常有上下界限制,如`List<?> list`表示列表可能包含任意类型的元素,而`List<? extends Number> list`则表示列表中的元素必须是Number或其子类。 6. 级联泛型:如`List...
【李兴华 Java核心技术 配套案例代码源码】是一份专为学习Java核心技术而设计的教学资源,由知名教育机构“魔乐教育”的专家李兴华编写。这套源码涵盖了Java编程的基础到进阶,旨在帮助学员深入理解并熟练掌握Java...
本篇文章将带你入门Java泛型,通过实例深入理解其核心概念。 1. **泛型的基本概念** - 泛型是一种允许在定义类、接口和方法时使用类型参数的机制。这使得代码可以在编译时期检查类型,避免了不必要的类型转换,并...
1. **类型擦除**:Java泛型在编译后会被擦除,这意味着在运行时,泛型类和非泛型类是相同的。类型参数被替换为它们的边界类型(通常是`Object`)。因此,泛型的主要优势在于编译时的检查,而不是运行时的性能提升。 ...
《Java核心技术 第9版 中英 卷1-2 源代码 全集》是一部针对Java编程语言的经典教程,包含了全面的源代码示例。这个压缩包提供了该书的两个卷,分别是卷1《基础知识》和卷2《高级特性》,以及对应的英文版本,帮助...
《Java核心技术 卷II 高级特性》是Java开发者深入学习和掌握Java平台高级特性的经典之作,原书第9版更是集成了最新的Java技术和发展趋势。这本书详细讲解了Java编程语言的高级特性,旨在帮助程序员提升编程技能,...
1. 类型参数:类型参数是泛型的核心,它代表了一种未知的类型,用尖括号()包围,如`<T>`。这里的`T`就是一个类型参数,可以代表任意类型。在实例化泛型类或使用泛型方法时,会替换为实际的类型。 2. 泛型类:泛型...
本PDF版本为《Java核心技术 卷1》,主要关注Java的基础知识,适合初学者和有一定经验的开发者深入理解Java的核心概念。由于是文字版,用户可以方便地复制和粘贴代码片段进行学习和实践,同时书内带有目录,使得查阅...