15.10.2逆变示例:
public
class
GenericWriting {
static
<T>
void
writeExact(List<T> list, T item){
list.add(item);
}
static
<T> T get(List<T> list){
return
list.get(0);
}
static
List<Apple>
apples
=
new
ArrayList<Apple>();
static
List<Fruit>
fruits
=
new
ArrayList<Fruit>();
static
void
f1(){
writeExact
(
apples
,
new
Apple());
writeExact
(
fruits
,
new
Apple());
Fruit fruit =
get
(
fruits
);
fruit.s();
}
static
<T>
void
writeWithWildcard(List<?
super
T> list, T item){
list.add(item);
}
static
void
f2(){
writeWithWildcard
(
apples
,
new
Apple());
writeWithWildcard
(
fruits
,
new
Apple());
fruits
.get(0).s();
}
public
static
void
main(String[] args) {
f1
();
f2
();
}
}
在原示例的代码中是没有下面代码的:
Fruit fruit =
get
(
fruits
);
//在原代码中是没有此行与下一行代码的
fruit.s();
static
<T> T get(List<T> list){
return
list.get(0);
}
fruits
.get(0).s();
作者在后面的的描述中这样写到:writeExact()
方法使用了一个确切的参数类型(无通配符)。地
f1()
中,可以看到这工作良好
------
只要你向
List<Apple>
中放置
Apple
。
但是,writeExact()
不充许将
Apple
放置到
List<Fruit>
中,即使知道这样应该是可以的。
但是我在做测试时发现将Apple
放入到
List<Fruit>
中是可以的,当调用
get()
方法自动向上转型。再调用其中重写的方法
s()
时调用的是
Apple
中的
S();
我的开发环境是jdk1.6.0_14,eclipse
3.4.2
本来是以为版本的差别可是我用1.5进行编译时还是同样的结果。
如此说来
writeWithWildcard
方法中
所作用的"
超类型通符
"
还有什么用处呢。
分享到:
相关推荐
Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...
除了泛型的基本用法之外,《Thinking in Java》还探讨了更高级的主题,如反射机制,这是一种能够获取类的信息并动态创建对象的技术,在某些场景下非常有用。 ### 四、案例分析与实践 #### 1. 实战案例 书中包含多...
类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java...
Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...
《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书的练习题是学习Java的重要组成部分,因为它们能够帮助读者巩固理论知识并提升实践能力。以下是对"Thinking in ...
首先,源码中涵盖了《Thinking in Java 4》的主要章节内容。例如,你可以看到有关类和对象的代码,它们展示了如何定义类、创建对象以及使用封装、继承和多态等面向对象特性。此外,还会包含关于异常处理的示例,教你...
《Thinking in Java》是Bruce Eckel的经典之作,第四版涵盖了Java编程语言的广泛主题,适合初学者和有经验的程序员。这本书深入浅出地讲解了Java的核心概念和技术,旨在帮助读者建立坚实的编程基础,并理解面向对象...
### Java中的泛型 #### 什么是泛型? 泛型是Java SE 5.0中引入的一项新特性,它允许在程序设计中使用参数化类型,从而实现类型安全的集合类和其他容器类。在使用泛型之前,Java程序员通常依赖于Object类型作为通用...
《Thinking in Java》是Bruce Eckel的经典之作,被誉为学习Java编程的权威指南。该书以其深入浅出的方式,详尽地介绍了Java语言的核心概念和技术。第三版是此书的一个重要里程碑,它涵盖了Java语言的诸多关键特性,...
泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,极大地提高了代码的类型安全性和可读性。泛型允许我们在类、接口和方法中使用类型参数,这样我们可以在编译时检查类型,避免了运行时类型转换的麻烦和潜在的...
Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全...在进行"关于Java基础的泛型的练习"时,可以尝试编写不同的泛型类、泛型方法,体验泛型带来的便利,并理解其背后的类型系统和类型擦除机制。
3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....
3. **集合框架**:《Thinking in Java》深入讨论了Java集合框架,包括ArrayList、LinkedList、HashSet、HashMap等容器的使用和它们之间的区别,以及泛型的引入,如何编写类型安全的代码。 4. **多线程**:Java对...
在《Thinking in Java》中,作者首先会引导读者理解基本的语法结构,如变量、数据类型、运算符和控制流。 接着,书中深入探讨了类和对象,这是Java的核心概念。通过实例,读者可以学习如何定义类,创建对象,并理解...
源码是程序员与计算机交流的语言,通过阅读和分析《Thinking in Java》的源码,我们可以更直观地理解书中的编程思想和设计模式。第四版的源码反映了Java SE 5.0及之后的版本特性,如枚举类型、泛型、注解等,这些都...
"Thinking in Java 习题答案"是配套的解答集,为读者提供了书中习题的解决方案,帮助读者更好地理解和应用所学知识。 习题答案通常涵盖以下几个关键知识点: 1. **基础语法**:包括变量声明、数据类型、运算符、...
Java中的泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型方法是泛型概念的一个关键部分,它允许我们在方法签名中使用类型参数,从而使方法能够处理不同类型的参数。在这个“Java...
以上只是《Java编程思想》中部分核心知识点的概述,实际书籍中涉及的内容更为丰富,包括网络编程、数据库连接、GUI编程、Swing、JDBC、设计模式等多个方面,是一本全面而深入的Java学习指南。通过阅读和实践书中的...
《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深受程序员喜爱,被誉为学习Java的必备参考书。这本书全面深入地探讨了Java语言的核心概念和技术,不仅适合初学者,也对有经验的程序员提供了...