//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")
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,客户端站点"忘记"指定类型参数,因为API编写器我希望它意味着"只返回节点".有没有办法定义一个通用方法(而不是一个类)来实现这个(或等价).注意:在实现中使用清单来执行转换if(manifest!= scala.reflect.Manifest.Nothing)将无法编译...我有一种唠叨的感觉,一些Scala向导知道如何使用Predef.<:<为了这 :-)
想法?