Можно ли в Scala заставить вызывающего пользователя указать параметр типа для полиморфного метода?

//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. <: < для этого: -)

Идеи?

14
задан Ben James 9 December 2010 в 22:49
поделиться