`
woaiwofengkuang
  • 浏览: 26528 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Thinking in java 中关于泛型的逆变

阅读更多

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 方法中 所作用的" 超类型通符 " 还有什么用处呢。

 

 

 

0
1
分享到:
评论

相关推荐

    Java中的泛型简析实战.zip

    Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...

    Thinking in java .txt

    除了泛型的基本用法之外,《Thinking in Java》还探讨了更高级的主题,如反射机制,这是一种能够获取类的信息并动态创建对象的技术,在某些场景下非常有用。 ### 四、案例分析与实践 #### 1. 实战案例 书中包含多...

    Thinking in java4(中文高清版)-java的'圣经'

    类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java...

    Java泛型_Java中的泛型结构_

    Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...

    Thinking in Java 练习题答案

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书的练习题是学习Java的重要组成部分,因为它们能够帮助读者巩固理论知识并提升实践能力。以下是对"Thinking in ...

    Thinking in Java 4 源码 导入IDEA可直接运行

    首先,源码中涵盖了《Thinking in Java 4》的主要章节内容。例如,你可以看到有关类和对象的代码,它们展示了如何定义类、创建对象以及使用封装、继承和多态等面向对象特性。此外,还会包含关于异常处理的示例,教你...

    Thinking in Java 4th Edition + Annotated Solution Guide (代码)英文文字版 带书签 有答案

    《Thinking in Java》是Bruce Eckel的经典之作,第四版涵盖了Java编程语言的广泛主题,适合初学者和有经验的程序员。这本书深入浅出地讲解了Java的核心概念和技术,旨在帮助读者建立坚实的编程基础,并理解面向对象...

    Java中的泛型

    ### Java中的泛型 #### 什么是泛型? 泛型是Java SE 5.0中引入的一项新特性,它允许在程序设计中使用参数化类型,从而实现类型安全的集合类和其他容器类。在使用泛型之前,Java程序员通常依赖于Object类型作为通用...

    《thinking in java》第三版完整PDF书籍+习题答案(中文版)

    《Thinking in Java》是Bruce Eckel的经典之作,被誉为学习Java编程的权威指南。该书以其深入浅出的方式,详尽地介绍了Java语言的核心概念和技术。第三版是此书的一个重要里程碑,它涵盖了Java语言的诸多关键特性,...

    java 一个关于泛型的简单例子

    泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,极大地提高了代码的类型安全性和可读性。泛型允许我们在类、接口和方法中使用类型参数,这样我们可以在编译时检查类型,避免了运行时类型转换的麻烦和潜在的...

    关于java基础的泛型的练习

    Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全...在进行"关于Java基础的泛型的练习"时,可以尝试编写不同的泛型类、泛型方法,体验泛型带来的便利,并理解其背后的类型系统和类型擦除机制。

    3.java实例化泛型类.zip

    3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....

    Thinkingin Java电子书

    3. **集合框架**:《Thinking in Java》深入讨论了Java集合框架,包括ArrayList、LinkedList、HashSet、HashMap等容器的使用和它们之间的区别,以及泛型的引入,如何编写类型安全的代码。 4. **多线程**:Java对...

    Thinking in Java中英文2版

    在《Thinking in Java》中,作者首先会引导读者理解基本的语法结构,如变量、数据类型、运算符和控制流。 接着,书中深入探讨了类和对象,这是Java的核心概念。通过实例,读者可以学习如何定义类,创建对象,并理解...

    thinking in java 第四版 源码

    源码是程序员与计算机交流的语言,通过阅读和分析《Thinking in Java》的源码,我们可以更直观地理解书中的编程思想和设计模式。第四版的源码反映了Java SE 5.0及之后的版本特性,如枚举类型、泛型、注解等,这些都...

    Thinking in Java 习题答案

    "Thinking in Java 习题答案"是配套的解答集,为读者提供了书中习题的解决方案,帮助读者更好地理解和应用所学知识。 习题答案通常涵盖以下几个关键知识点: 1. **基础语法**:包括变量声明、数据类型、运算符、...

    Java中的泛型方法演示代码

    Java中的泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型方法是泛型概念的一个关键部分,它允许我们在方法签名中使用类型参数,从而使方法能够处理不同类型的参数。在这个“Java...

    java编程思想thinking in java

    以上只是《Java编程思想》中部分核心知识点的概述,实际书籍中涉及的内容更为丰富,包括网络编程、数据库连接、GUI编程、Swing、JDBC、设计模式等多个方面,是一本全面而深入的Java学习指南。通过阅读和实践书中的...

    Thinking in java 电子书

    《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深受程序员喜爱,被誉为学习Java的必备参考书。这本书全面深入地探讨了Java语言的核心概念和技术,不仅适合初学者,也对有经验的程序员提供了...

Global site tag (gtag.js) - Google Analytics