`
spitcold
  • 浏览: 8528 次
  • 性别: 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(4th_en)_7

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java(4th_en)_5

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java 4th Edition(中文扫描版-带目录和源码)

    本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、JavaI/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了...

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

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

    《Thinking In Java》中文版

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java(4th_en)_8

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java(4th_en)_4

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java(4th_en)_6

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java(4th_en)_3

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java(4th_en)_1

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java(4th_en)_2

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    Thinking in Java第三版+第四版

    本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过...

    thinkinjava源码-Thinking-in-Java:ThinkingInJava源代码和练习题

    Thinking in Java (Forth Edition) 包含了很多书本中的源代码,因为从官网提供的资源中无法获取源代码。为了更好的学习,决定,手打源代码。一方面练习编程速度,同时记忆代码,学习编程风格。 同时尽量将书本中的...

    恒生电子JAVA笔试试题-Thinking-In-Java-Notes:ThinkinginJava学习笔记

    恒生电子JAVA笔试试题 #《Thinking In Java》学习笔记 [TOC] 阅读计划 章节列表 对象导论 一切都是对象 操作符 控制执行流程 初始化与清理 访问权限控制 复用类 多态 接口 内部类 持有对象 通过异常处理错误 字符串 ...

    java笔试题算法-Thinking-in-Java:《ThinkingInjava》-Note《Java编程思想》笔记作者:[美]Bruce

    这本书不会一味地讲语法,更多的是会讲一些Java的设计思想,比如他不会一开始就教你怎么用泛型,而是先介绍为什么会出现泛型,没有泛型会有什么后果,Java设计者又为什么会选择泛型的擦除,书中对是否选择泛型的擦除...

    asp.net知识库

    [ASP.NET 2.0]PageParser.GetCompiledPageInstance中存在一个Bug 如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET ...

Global site tag (gtag.js) - Google Analytics