在看Thinking in java的泛型和深入容器研究,特别是泛型那章后半部分,搞得头好晕呀.....
深入容器研究好像不结合JDK源代码没法学的样子?
      各位是怎么学过来的呀? 谈下经验?

解决方案 »

  1.   

    我也有点晕  简单我会  不过像这种的TreeSet(Collection<? extends E> c)这里面的Collection<? extends E>我有点不太懂...看文章说的又是很多  看完有点晕...
      

  2.   

    Thinking in JAVA的例子还是很多,不过都是前后结合的,一个例子可能贯穿一个章节,你应该每个都看懂,并且
    结合API看,仔细了解一个他调用的每个方法的过程,看完后最好自己实践一下,不然很难掌握
      

  3.   

    对于泛型,个人觉得,多敲几次代码,当你敲多几次的时候就会突然明白的
    我学的时候没学泛型(因为我学的是1.4的),后来有看到泛型的介绍,去看jdk文档,试着敲一些代码出来,刚开始也不理解,多试几次就懂了
    其实自己去设计一个泛型的线性链表,试着设计出来,并且用它,如果能做到的话,你就能理解了至于容器研究,没研究过
      

  4.   

    1)泛型的基本原理先弄清楚,比如擦除大法
    2)练习用泛型自己定义类,方法等等
    3)结合集合类框架在研究我觉得最重要还要理解它其中的原理,可以看看 core java
      

  5.   

    这种问题论坛里是说部清楚的,要动手去做,Google一下,用实践来告诉自己@
      

  6.   

    类比一下C++的泛型,不如让自己的思想回到学习编程的原点,如果是你,你为什么要设计泛型,用起来好处在哪里?举个例子:比如Thinking in Java里面提到利用泛型实现的元组,不正是为了解决程序语言里return只能返回单个值的问题么原来C++里面的Template,STL等,也充分利用了泛型编程的好处,个人拙见,就在一个字:泛!泛就是要适应各种类型,这样重复的代码不用多次编写,仅仅在运行时决定实际类型就好了。各种语言对于泛型的支持不一样,但思想是统一的。
      

  7.   

    我感觉core java和the java programming language将的比较清楚.
      

  8.   

    泛型得弄清楚下面这些的区别1,List
    2,List<Object>
    3,List<Number>
    4,List<?>
    5,List<? extends Number>
    6,List<? super Long>普通的泛型使用估计没啥问题,但是带上 ? 的泛型就会变得很复杂。对于 <? super T> 和 <? extends T> 看看这个例子:如果要将某一个数组中的元素拷贝至另一个的话1,先看看这个方法签名:
          public static <T> void copy(List<T> src, List<T> dest)如果 src 和 dest 是相同泛型参数的话,这个签名是没有问题,但是由于泛型类与数组不一样,
    由于泛型类并不具有协变性,也就是说下面的代码是错误的:
          List<Object> objs = new ArrayList<Long>();数组是协变性的,下面的代码是正确的:
          Object[] objs = new Long[4];用这个 copy 方法的话,如果 src 是 List<Long>,而 dest 是 List<Object> 的话,这样
    就会产生编译错误。但是实际上 List<Long> 中的每一个元素是可以赋值给 List<Object> 的,
    因此这个 copy 方法签名还有待完善。由于泛型类不具有协变性,但是 Java 的泛型提供了一个通配符类型 ? 使用这个可以将泛型类变
    成协变的,下面的代码是正确的:
          List<? extends Object> objs = new ArrayList<Long>();<? extends Object> 表示泛型是 Object 或者是 Object 的子类型,同理
    <? super Long> 表示泛型是 Long 或者是 Long 的父类型。这样就可以把 copy 方法完善成为:
          public static <T> void copy (List<? extends T> src, List<? super T> dest)至于其他的,看看下面的语句哪些正确的,哪些是不正确的?Pair 是个泛型类,SubTypeOfPair 是 Pair 的子类Collection<Pair<String, Long>> c1 = new ArrayList<Pair<String, Long>>();Collection<Pair<String, Long>> c2 = c1;            // s1
    Collection<Pair<String, ?>> c3 = c1;               // s2
    Collection<? extends Pair<String, ?>> c4 = c1;     // s3Collection<SubTypeOfPair<String, Long>> c1 = new ArrayList<SubTypeOfPair<String, Long>>();Collection<Pair<String, Long>> c2 = c1;            // s4
    Collection<SubTypeOfPair<String, Long>> c3 = c1;   // s5
    Collection<Pair<String, ?>> c4 = c1;               // s6
    Collection<? extends Pair<String, ?>> c5 = c1;     // s7