相关疑难解决方法(0)

如何在Scala上绕过类型擦除?或者,为什么我不能获得我的集合的类型参数?

Scala生活中的一个可悲事实是,如果你实例化一个List [Int],你可以验证你的实例是一个List,你可以验证它的任何单个元素是一个Int,但不是它是一个List [ Int],可以很容易地验证:

scala> List(1,2,3) match {
     | case l : List[String] => println("A list of strings?!")
     | case _ => println("Ok")
     | }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!
Run Code Online (Sandbox Code Playgroud)

-unchecked选项将责任直接归咎于类型擦除:

scala>  List(1,2,3) match {
     |  case l : List[String] => println("A list of strings?!")
     |  case _ => println("Ok")
     |  }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
        case l …
Run Code Online (Sandbox Code Playgroud)

scala type-erasure

366
推荐指数
7
解决办法
7万
查看次数

Scala 2.10中的Reified泛型

Scala中缺少具体化的泛型是最让我烦恼的事情,因为如果不使用复杂的结构就无法实现简单的事情.

Kotlin和Ceylon都支持具体化的泛型,因此它绝对有可能在JVM之上这样做.在过去,据说Scala无法在没有JVM变更的情况下支持它们,但现在传闻 Scala 2.10 对于具体化的支持有限.所以我的问题是:

  • 我们可以期待Scala 2.10中的具体化,我是否能够多次实现一般特征?这有多有限?
  • 如果Scala 2.10的具体证明比KotlinCeylon更有限.这是为什么 ?

generics scala kotlin ceylon

28
推荐指数
2
解决办法
5599
查看次数

5
推荐指数
1
解决办法
1198
查看次数

标签 统计

scala ×3

generics ×2

type-erasure ×2

.net ×1

ceylon ×1

kotlin ×1

language-design ×1