作者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)