2013-04-20 66 views
0

如何在Scala通用函数中使用嵌套类型?我想实现这样的事情我可以在Scala通用函数中使用嵌套类型吗?

implicit def basicDBList2List[List[A]](value : BasicDBList) = value.toList.asInstanceOf[List[A]] 

编译器会发出以下错误:

scala: not found: type A 
    implicit def basicDBList2List[List[A]](value : BasicDBList) = value.toList.asInstanceOf[List[A]] 
                          ^

回答

2

当你写:

implicit def basicDBList2List[List[A]](value: BasicDBList) = ... 

...那没有意味着你的想法。您正在声明一个名为List的新类型参数,而不是指图书馆中现有的List特征!您还声明您新定义的List类型需要一些类型参数,您称其为A,但实际上不能引用它。

什么你大概的意思是:

implicit def basicDBList2List[A](value: BasicDBList): List[A] = ... 

...它说的是,对于任何类型的A,可以将BasicDBList转换为List[A]

这是粗略的代码,但是,有两个原因:

  1. 什么类型的贵BasicDBList类实际上包含哪些内容?可能没有任何可能的A。运行时很可能会得到ClassCastException
  2. 为什么你想要从BasicDBListList[A]的隐式转换?这几乎总是一个坏主意。
+0

我必须包装shitty mongo java驱动程序,所以我不必通过强制转换污染客户端代码。所以基本上,当我从Mongo DB获取特定字段时,我知道它是什么类型。 – expert 2013-04-30 03:01:34

+0

尝试[Casbah](https://github.com/mongodb/casbah) – mergeconflict 2013-04-30 04:31:14

+0

Shitty casbah是我开始玩含蓄:)的原因:) – expert 2013-05-02 00:50:49

0

我想还是有它喜欢:

implicit def basicDBList2List[A](value : BasicDBList) = value.toList.asInstanceOf[List[A]] 
相关问题