正如你所说,等效的Scala代码是
val g: UndirectedGraph[String, DefaultEdge] = new SimpleGraph[String, DefaultEdge](classOf[DefaultEdge])
但是由于Scala可以推断您的构造函数的类型参数,所以可以减少一些
val g: UndirectedGraph[String, DefaultEdge] = new SimpleGraph(classOf[DefaultEdge])
但是,这并不像干燥一样. “DefaultEdge”类型被提到两次.你可以得到更多的干燥与清单.首先你创建一个创建SimpleGraphs的工厂.
object SimpleGraph {
import scala.reflect.Manifest
def apply[T, E]()(implicit mfst : Manifest[E]) = new SimpleGraph[T,E](mfst.erasure.asInstanceOf[Class[_ <: e>
}
这样,我们可以创建一个图
val g = SimpleGraph[String, DefaultEdge]()
要么
val g: UndirectedGraph[String, DefaultEdge] = SimpleGraph()
显然,如果您创建一堆SimpleGraphs,这种技术是值得的