<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    人在江湖

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    thinking in java看了差不多有5,6遍,但是之前有些章節(jié)看得不仔細(xì)。最近有感于自己技術(shù)的不扎實(shí),開始重看thinking in java, 發(fā)現(xiàn)了書中的一個(gè)錯(cuò)誤,在原書的491頁。

     

       1: //: generics/Wildcards.java
       2: // Exploring the meaning of wildcards.
       3:  
       4: public class Wildcards {
       5:    // Raw argument:
       6:   static void rawArgs(Holder holder, Object arg) {
       7:     // holder.set(arg); // Warning:
       8:     //   Unchecked call to set(T) as a
       9:     //   member of the raw type Holder
      10:     // holder.set(new Wildcards()); // Same warning
      11:  
      12:     // Can't do this; don't have any 'T':
      13:     // T t = holder.get();
      14:  
      15:     // OK, but type information has been lost:
      16:     Object obj = holder.get();
      17:   }    
      18:   // Similar to rawArgs(), but errors instead of warnings:
      19:   static void unboundedArg(Holder<?> holder, Object arg) {
      20:     // holder.set(arg); // Error:
      21:     //   set(capture of ?) in Holder<capture of ?>
      22:     //   cannot be applied to (Object)
      23:     // holder.set(new Wildcards()); // Same error
      24:  
      25:     // Can't do this; don't have any 'T':
      26:     // T t = holder.get();
      27:  
      28:     // OK, but type information has been lost:
      29:     Object obj = holder.get();
      30:   }    
      31:   static <T> T exact1(Holder<T> holder) {
      32:     T t = holder.get();
      33:     return t;
      34:   }
      35:   static <T> T exact2(Holder<T> holder, T arg) {
      36:     holder.set(arg);
      37:     T t = holder.get();
      38:     return t;
      39:   }
      40:   static <T>
      41:   T wildSubtype(Holder<? extends T> holder, T arg) {
      42:     // holder.set(arg); // Error:
      43:     //   set(capture of ? extends T) in
      44:     //   Holder<capture of ? extends T>
      45:     //   cannot be applied to (T)
      46:     T t = holder.get();
      47:     return t;
      48:   }    
      49:   static <T>
      50:   void wildSupertype(Holder<? super T> holder, T arg) {
      51:     holder.set(arg);
      52:     // T t = holder.get();  // Error:
      53:     //   Incompatible types: found Object, required T
      54:  
      55:     // OK, but type information has been lost:
      56:     Object obj = holder.get();
      57:   }
      58:   public static void main(String[] args) {
      59:     Holder raw = new Holder<Long>();
      60:     // Or:
      61:     raw = new Holder();
      62:     Holder<Long> qualified = new Holder<Long>();
      63:     Holder<?> unbounded = new Holder<Long>();
      64:     Holder<? extends Long> bounded = new Holder<Long>();
      65:     Long lng = 1L;
      66:  
      67:     rawArgs(raw, lng);
      68:     rawArgs(qualified, lng);
      69:     rawArgs(unbounded, lng);
      70:     rawArgs(bounded, lng);
      71:     
      72:     unboundedArg(raw, lng);
      73:     unboundedArg(qualified, lng);
      74:     unboundedArg(unbounded, lng);
      75:     unboundedArg(bounded, lng);
      76:  
      77:     // Object r1 = exact1(raw); // Warnings:
      78:     //   Unchecked conversion from Holder to Holder<T>
      79:     //   Unchecked method invocation: exact1(Holder<T>)
      80:     //   is applied to (Holder)
      81:     Long r2 = exact1(qualified);
      82:     Object r3 = exact1(unbounded); // Must return Object
      83:     Long r4 = exact1(bounded);
      84:     
      85:     // Long r5 = exact2(raw, lng); // Warnings:
      86:     //   Unchecked conversion from Holder to Holder<Long>
      87:     //   Unchecked method invocation: exact2(Holder<T>,T)
      88:     //   is applied to (Holder,Long)
      89:     Long r6 = exact2(qualified, lng);
      90:     // Long r7 = exact2(unbounded, lng); // Error:
      91:     //   exact2(Holder<T>,T) cannot be applied to
      92:     //   (Holder<capture of ?>,Long)
      93:     // Long r8 = exact2(bounded, lng); // Error:
      94:     //   exact2(Holder<T>,T) cannot be applied
      95:     //   to (Holder<capture of ? extends Long>,Long)
      96:     
      97:     // Long r9 = wildSubtype(raw, lng); // Warnings:
      98:     //   Unchecked conversion from Holder
      99:     //   to Holder<? extends Long>
     100:     //   Unchecked method invocation:
     101:     //   wildSubtype(Holder<? extends T>,T) is
     102:     //   applied to (Holder,Long)
     103:     Long r10 = wildSubtype(qualified, lng);
     104:     // OK, but can only return Object:
     105:     Object r11 = wildSubtype(unbounded, lng);
     106:     Long r12 = wildSubtype(bounded, lng);
     107:     
     108:     // wildSupertype(raw, lng); // Warnings:
     109:     //   Unchecked conversion from Holder
     110:     //   to Holder<? super Long>
     111:     //   Unchecked method invocation:
     112:     //   wildSupertype(Holder<? super T>,T)
     113:     //   is applied to (Holder,Long)
     114:     wildSupertype(qualified, lng);
     115:     // wildSupertype(unbounded, lng); // Error:
     116:     //   wildSupertype(Holder<? super T>,T) cannot be
     117:     //   applied to (Holder<capture of ?>,Long)
     118:     // wildSupertype(bounded, lng); // Error:
     119:     //   wildSupertype(Holder<? super T>,T) cannot be
     120:     //  applied to (Holder<capture of ? extends Long>,Long)
     121:   }
     122: } ///:~

    看第104-105行:

    // OK, but can only return Object:
    Object r11 = wildSubtype(unbounded, lng);

    Holder<?>是不能傳給Holder<? extends T>的。

     

    java的Generics限制和陷阱都很多,一本書1033頁,generics這章占了近100頁,和UI那章差不多長。陷阱越多的地方越是應(yīng)該好好學(xué)學(xué)。這章不易理解,讀起來很慢,啃了三分之二多了,還在繼續(xù)啃。等啃完了有心情就總結(jié)一篇博客。

    posted on 2012-07-30 10:30 人在江湖 閱讀(2266) 評(píng)論(1)  編輯  收藏 所屬分類: java

    Feedback

    # re: 發(fā)現(xiàn)thinking in java 4th edition的一個(gè)錯(cuò)誤[未登錄] 2012-08-01 10:14 thomas
    看了這么多遍,太強(qiáng)了  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲国产精品无码久久久| 亚洲精华国产精华精华液好用| 在线A亚洲老鸭窝天堂| 免费v片在线观看品善网| 国产中文字幕免费观看| 中文在线免费看视频| 亚洲真人无码永久在线观看| 亚洲免费中文字幕| 激情综合亚洲色婷婷五月APP| 久久亚洲精品无码观看不卡| 91人人区免费区人人| 国产三级在线免费观看| 青柠影视在线观看免费高清| 嫩草成人永久免费观看| 免费精品久久久久久中文字幕| 牛牛在线精品免费视频观看| 一级毛片不卡免费看老司机| 波霸在线精品视频免费观看| 免费无码又爽又刺激网站直播| 日韩精品无码一区二区三区免费| 深夜免费在线视频| 国产精品免费久久| 亚洲精品乱码久久久久久蜜桃图片| 亚洲日本中文字幕天天更新| 精品日韩亚洲AV无码一区二区三区 | 亚洲日韩中文字幕在线播放| 狼友av永久网站免费观看| 国产成人免费手机在线观看视频| 免费a级毛片无码a∨性按摩| 亚洲伊人久久大香线蕉综合图片| 久久精品亚洲综合一品| 亚洲国产成人91精品| 久久无码av亚洲精品色午夜| 日韩免费码中文在线观看| 青柠影视在线观看免费| 国产v精品成人免费视频400条| 成人免费无码大片a毛片软件| 亚洲国产成人精品91久久久| 亚洲产国偷V产偷V自拍色戒| 亚洲精品无码mv在线观看网站| 亚洲麻豆精品果冻传媒|