作者godfat (godfat 真常)
看板PLT
標題Re: [問題] Scala 的 Covariant/Contravariant/Inv …
時間Wed Mar 18 23:46:36 2009
※ 引述《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)