Der entsprechende Scala-Code ist, wie Sie sagen
val g: UndirectedGraph[String, DefaultEdge] = new SimpleGraph[String, DefaultEdge](classOf[DefaultEdge])
Aber das kann DRYed up ein bisschen, weil Scala kann die Typ-Parameter Ihrer Konstruktor inferieren
val g: UndirectedGraph[String, DefaultEdge] = new SimpleGraph(classOf[DefaultEdge])
Aber trockener kann es gar nicht werden. Der Typ "DefaultEdge" wird zweimal erwähnt. Mit Manifesten kann man noch mehr DRY erreichen. Zuerst erstellen Sie eine Fabrik für die Erstellung von SimpleGraphs.
object SimpleGraph {
import scala.reflect.Manifest
def apply[T, E]()(implicit mfst : Manifest[E]) = new SimpleGraph[T,E](mfst.erasure.asInstanceOf[Class[_ <: E]])
}
Und damit können wir einen Graphen erstellen mit entweder
val g = SimpleGraph[String, DefaultEdge]()
o
val g: UndirectedGraph[String, DefaultEdge] = SimpleGraph()
Natürlich lohnt sich diese Technik nur, wenn Sie eine Reihe von SimpleGraphs erstellen
Nun einige Vorbehalte und Warnungen. Manifeste werden immer noch als experimentell betrachtet. Ich vermute, dass sie zu nützlich sind, um jemals fallen gelassen zu werden, aber es gibt keine Garantien. Mehr über Manifeste finden Sie unter http://scala-blogs.org/2008/10/manifests-reified-types.html