【发布时间】:2011-05-23 04:18:48
【问题描述】:
//API
class Node
class Person extends Node
object Finder
{
def find[T <: Node](name: String): T = doFind(name).asInstanceOf[T]
}
//Call site (correct)
val person = find[Person]("joe")
//Call site (dies with a ClassCast inside b/c inferred type is Nothing)
val person = find("joe")
在上面的代码中,客户端“忘记”指定类型参数,作为 API 编写者,我想要这意味着“只返回节点”。有没有办法定义一个通用方法(不是一个类)来实现这个(或等效的)。注意:在实现中使用清单来进行强制转换 if (manifest != scala.reflect.Manifest.Nothing) 不会编译...我有种 Scala 向导知道如何使用 Predef 的烦恼。<:>
想法?
【问题讨论】:
-
@Ben,感谢您对我最初草率帖子的更正 :-)
标签: generics scala type-inference