Re: [問題] Scala 的 Covariant/Contravariant/Inv …

看板PLT (程式語言與理論)作者 (godfat 真常)時間15年前 (2009/03/18 23:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串17/17 (看更多)
※ 引述《sbrhsieh (sbr)》之銘言: : 那反過來,如果假設 scala List 當初也是設計成 mutable 容器(也就是 List[T]), : 那麼我可以在 Java 裡這樣子使用 local variable: : java.util.List<Integer> int_list = new java.util.ArrayList<Integer>(); : java.util.List<? extends Object> any_list = int_list; : System.out.println(any_list.get(0)); : 請問,在 scala 中該怎麼作? 稍微試了一下,如果是內建型別的話,似乎是有簡單的方式。 像是 Array 就是 invariant, 但是可以透過 readOnly 轉成接受 covariant 者: val int_list: Array[Integer] = Array(1,2,3) val any_list: RandomAccessSeq[Any] = int_list.readOnly 如果是來自 java 的 ArrayList, 也可以透過 wrapper: import scala.collection.jcl.ArrayList // jcl 大概是 java collection val jint_list: ArrayList[Integer] = new ArrayList[Integer](new java.util.ArrayList[Integer]) 接著就又能轉成 RandomAccessSeq: val jany_list: RandomAccessSeq[Any] = jint_list.readOnly 這樣算是勉強能解決這個問題吧... 並不 general, 但針對內建的東西是可以用的。 -- Hear me exalted spirits. Hear me, be you gods or devils, ye who hold dominion here: I am a wizard without a home. I am a wonderer seeking refuge. Sacrifice -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18 ※ 編輯: godfat 來自: 220.135.28.18 (03/18 23:55)
文章代碼(AID): #19mHTV00 (PLT)
討論串 (同標題文章)
文章代碼(AID): #19mHTV00 (PLT)