PLT 板


LINE

看板 PLT  RSS
其實我從來沒真的搞懂過 java generic 到底是在做什麼, 只覺得他常常會造成很多的矛盾,讓我感到很困惑,進而放棄使用。 不過經過這一陣子嘗試 scala, 加上 macbuntu 的一些詳細說明, 我才忽然恍然到底是怎麼一回事 @@ 我覺得可以用這兩句話總結: ※ 引述《macbuntu (邀怪)》之銘言: : Java 的方法表示宣告 variance 的責任落在使用型別的人, : 而 Scala 的方法表示宣告 variance 的責任落在設計型別的人. java 要求使用者自行決定 variance 的種類, 而 scala 則反過來要求設計者在設計的時候就說明清楚。 同時,明白表示 +T 只能用在 return type, -T 只能用在 parameter type. 也就是說,就這點上 scala 限制是比 java generic 要來得多。 然而 java 多出來可以做的事: : static void func(A<? extends Number> a) { : Number n = a.get(); // OK : a.set(n); // compile time error : a.set(123); // compile time error : a.set(new Object()); // compile time error : a.set(null); // only this is OK : } : 上面那個 func() 裡面, 如果沒有前三個 set() 呼叫, 是可以 compile 沒問題的. : 但是 T 用在 parameter type 的時候根本不該允許 <? extends Number> [...其餘見原文] 似乎是沒什麼意義的... :s : 在使用型別的地方不需要用 <? extends X> 這種東西, 因為這已經定義在 A 裡了, 同時如果 scala 真的需要 upper/lower bound, 也有: [U <: T] 和 [U >: T] 可以用。就像在 sbrhsieh 裡提到的例子, 這邊 scala 確實也需要: def assign[U >: String](v: Variable[U], s: String) = v.set(s) 說明 Variable[U] 裡的 U 有個 lower bound 是 String, 可以 pass String 以上(parent)的所有型別。 : 型別不會像 Java 那樣處在不正確的狀態. 習慣 Java 的人會說 Java 用法比較靈活, : 但我自己覺得 Scala 的 variant 方法是往前更進了一步, 語意也更乾淨漂亮. : (哈, 語意而已... Scala 的語法我就很難習慣了... Java 中毒太深 :P ) 所以看來我是借用 scala 終於比較搞懂 java generic 了 :s 這麼說來 scala generic 確實跟 java generic 很相像, 不愧是設計者有重疊的部份?上次查了一下,java generic 的設計者 好像有一大堆人,其中一個正是 scala 的設計者。 可能是那時候沒想到,也可能是無法說服旁人吧 XD 我沒有查時間順序,或許這也滿令人玩味的。 至於語法的話,我覺得 scala 語法變化性實在很難在短時間內適應, 與其說他特別,不如說可能的寫法滿多的,要到很順手需要一點時間。 尤其 keyword 也一大堆,乍看之下還滿暈頭轉向的。 不過像是 return type 寫在右邊, 這倒是比較符合 functional programming 的風格。 就不曉得會不會兩邊都不討好就是了 :p -- Nobody can take anything away from him. Nor can anyone give anything to him. What came from the sea, has returned to the sea. Chrono Cross --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP