`
spitcold
  • 浏览: 8747 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

thinking in java中的一个泛型错误,谁能解释一下

阅读更多
//: generics/GenericWriting.java
import java.util.*;

public class GenericWriting {
    static <T> void writeExact(List<T> list, T item) {
        list.add(item);
    }
    static List<Apple> apples = new ArrayList<Apple>();
    static List<Fruit> fruit = new ArrayList<Fruit>();
    static void f1() {
        writeExact(apples, new Apple());
//    writeExact(fruit, new Apple()); // Error:   (出错行。。。。。。)
//      Incompatible types: found Fruit, required Apple
    }
    static <T> void
    writeWithWildcard(List<? super T> list, T item) {
      list.add(item);
    }
    static void f2() {
      writeWithWildcard(apples, new Apple());
      writeWithWildcard(fruit, new Apple());
    }
      public static void main(String[] args) { f1(); f2(); }
    } ///:~

以上是书中源代码。作者认为出错行的理由是fruit是ArrayList<Fruit>(),里面不能放Fruit的任何子类对象,但是:
我在eclipse中把出错行..的那行取消注释,可以正常编译运行。请问是什么道理
分享到:
评论
5 楼 iceman1952 2012-07-01  
wu19880125 写道
lz,我觉得你看书的时候应该仔细点,仔细看393行的倒数第二行
作者知道可以,但是这是违反静态类型安全的!你应该仔细琢磨作者的书哈!!!

wu19880125 写道
还有,不要动不动就说是个错误,免得误人子弟!

楼主理解的没错,这个地方就是错误。
“作者知道可以,但是这是违反静态类型安全的!”请问,你怎么看出这点的?作者在说“这是违反静态类型安全的”指的是向 List<? super Apple>中加入Fruit是违反静态类型安全的
4 楼 wu19880125 2008-08-25  
还有,不要动不动就说是个错误,免得误人子弟!
3 楼 wu19880125 2008-08-25  
lz,我觉得你看书的时候应该仔细点,仔细看393行的倒数第二行
作者知道可以,但是这是违反静态类型安全的!你应该仔细琢磨作者的书哈!!!
2 楼 lovezqw 2008-02-26  
List<? super T> list, list可以使用add方法的

List<? extends T> list, 则list不可以使用add方法,只能查询~
1 楼 movingboy 2008-02-26  
如果文章的代码确实是你贴出来的那样,那确实是个错误。
你查一下该书的勘误,看看这个错误是否已经纠正了?
还有你查一下作者写这本书时使用的编译器是不是比较老了?

相关推荐

    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...

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

    总之,这份《Thinking in Java 4》的源码是一个宝贵的资源库,它不仅仅是书本理论的实践展现,更是提升编程技能的实用工具。通过IDEA导入并运行这些源码,你可以亲手操作,加深对Java语言的理解,提升编程能力,成为...

    java编程思想thinking in java

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

    Thinking in Java中英文2版

    《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书以其全面性、深度和清晰的讲解而受到广大程序员的推崇,无论是初学者还是经验丰富的开发者,都能从中...

    Thinking in java 电子书

    通过深入学习《Thinking in Java》,读者不仅可以掌握Java语言本身,还能了解更广泛的编程思想和最佳实践,这对于成为一名优秀的Java开发者至关重要。书中的每个章节都包含了丰富的例子和练习,鼓励读者动手实践,...

    Thinking in Java 习题答案

    《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。...《Thinking in Java-answer》提供的答案集将帮助读者检查自己的理解,找到错误并修正,从而更有效地学习Java编程。

    thinking in java 源码

    以下是基于《Thinking in Java》这本书的一些核心知识点和在实际编程中可能遇到的相关内容: 1. **面向对象编程基础**:Java是一种完全面向对象的语言,源码中会涵盖类、对象、封装、继承和多态等基本概念。理解...

    The Thinking in Java Annotated Solution Guide

    通过《Thinking in Java Annotated Solution Guide》,读者不仅可以解决书中的练习题,还能深入理解Java编程的各个方面,从而提升编程技能和解决问题的能力。对于初学者来说,这是一本不可多得的学习资源;对于有...

    Thinking in Java(第一版)

    《Thinking in Java》是Bruce Eckel创作的一本Java编程经典教程,尤其以其第一版闻名于世。这本书深入浅出地介绍了Java语言的核心概念和技术,旨在帮助读者建立起对Java的全面理解,培养良好的编程思维习惯。作为一...

    Thinking in Java 3th书籍以及习题解答

    通过阅读《Thinking in Java》第三版,读者不仅可以深入理解Java语言,还能学习到良好的编程习惯和设计原则,从而成为一名优秀的Java开发者。书中丰富的例子和习题更是提供了实践和巩固知识的绝佳机会。对于初学者和...

    Thinking in Java 3rd Edition

    《Thinking in Java 3rd Edition》是一本深入且全面的Java编程教程,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过学习这本书,你可以系统地理解和掌握Java编程语言,并具备解决实际问题的能力。

    thinking in java 代码

    在压缩包文件"thinking in java source code"中,你可以找到书中各个章节示例程序的源代码。这些代码是理解和掌握Java编程思想的关键,它们涵盖了: 1. **基础语法**:包括变量声明、数据类型、运算符、流程控制...

    Thinking in Java中文版(3和4)

    《Thinking in Java》是Java编程领域的一本经典著作,由Bruce Eckel撰写,深受程序员喜爱。这本书分为第三版和第四版,提供了英文版和中文版,适合不同语言背景的学习者。书中内容详实且深入,从基础知识到高级概念...

    Thinking in Java 3th Edition中文版.pdf

    总的来说,《Thinking in Java 3rd Edition中文版》是一本全面而深入的Java教程,无论你是编程新手还是有经验的开发者,都能从中受益匪浅。通过这本书,你可以系统地学习Java语言,提升你的编程技能,为职业生涯打下...

    THINKING IN JAVA

    总之,《Thinking in Java》是一本深度与广度并存的Java编程教程,无论是对Java语言的初学者还是经验丰富的开发者,都能从中获益匪浅。它以其高质量的写作和丰富的实践内容,赢得了全球程序员的高度赞誉,成为了Java...

    thinking in java 第四版

    总之,《Thinking in Java》第四版中文版是一本全面且深入的Java教程,无论你是新手还是经验丰富的开发者,都能从中获益匪浅。在iPad或平板上阅读,更方便随时查阅和学习,为你的Java编程之旅提供强大的支持。

    Thing in Java\Thinking in Java 3rd Edition英文版,书后答案及代码

    这本书旨在帮助读者理解Java编程的核心概念,通过丰富的示例和解释来培养"思考像一个Java程序员"的能力。书后的答案和代码是学习过程中极其宝贵的资源,它们可以帮助读者验证自己的理解,解决在阅读过程中遇到的疑惑...

    Thinking in java源代码

    《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深入浅出地阐述了Java语言的核心概念和编程技术。翁凯教授在浙江大学的Java语言课程中,结合这本书的内容进行了讲解,并提供了配套的PPT和源...

Global site tag (gtag.js) - Google Analytics