我可以在Scala泛型函数中使用嵌套类型吗?

时间:2013-04-20 01:13:42

标签: 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 个答案:

答案 0 :(得分: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]的隐式转换?这几乎总是一个坏主意。

答案 1 :(得分:0)

我认为最好是这样:

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