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

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

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

    人在江湖

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    thinking in java看了差不多有5,6遍,但是之前有些章節看得不仔細。最近有感于自己技術的不扎實,開始重看thinking in java, 發現了書中的一個錯誤,在原書的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那章差不多長。陷阱越多的地方越是應該好好學學。這章不易理解,讀起來很慢,啃了三分之二多了,還在繼續啃。等啃完了有心情就總結一篇博客。

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

    Feedback

    # re: 發現thinking in java 4th edition的一個錯誤[未登錄] 2012-08-01 10:14 thomas
    看了這么多遍,太強了  回復  更多評論
      

    主站蜘蛛池模板: 久久精品成人免费观看| 一本大道一卡二大卡三卡免费| 精品视频一区二区三区免费| 亚洲视频人成在线播放| 一个人免费观看视频在线中文 | 免费人成网站在线观看不卡| 国产亚洲精品影视在线产品 | 美女裸免费观看网站| 国产精品成人四虎免费视频| 国产精品亚洲精品久久精品| 日本免费电影一区| 美国免费高清一级毛片| 亚洲精品偷拍视频免费观看| 国产免费牲交视频免费播放| 久久久久久a亚洲欧洲aⅴ| 99re这里有免费视频精品| 亚洲国产精品久久人人爱| 成年女性特黄午夜视频免费看| 亚洲永久网址在线观看| 男人的天堂亚洲一区二区三区 | 亚洲成a人片在线看| 国产三级免费观看| 中文字幕av免费专区| 亚洲爱情岛论坛永久| 最近最新MV在线观看免费高清| 亚洲国产成人久久一区二区三区| 日产国产精品亚洲系列| 国产无遮挡裸体免费视频在线观看 | 亚洲Aⅴ无码专区在线观看q| 免费精品国产自产拍在| 男女猛烈xx00免费视频试看| 亚洲国产精品一区二区久久hs| 91频在线观看免费大全| 亚洲av无码专区亚洲av不卡| 亚洲综合色视频在线观看| 最近2019年免费中文字幕高清| 亚洲国产一区二区三区在线观看 | 青青操免费在线观看| 亚洲综合久久一本伊伊区| 亚洲成A人片在线观看无码3D| 久草免费手机视频|