如何将类对象从Scala传递给Java?

我试图使用 Scala代码中的 Java类库. (JGraphT,要准确).我需要调用一个构造函数

public class simplegraph<V,E>
    extends AbstractBaseGraph<V,E>
    implements UndirectedGraph<V,E>
{
  public simplegraph(Class<? extends E> edgeClass) {...}
}

从Java中调用它,我会说:

UndirectedGraph<String,DefaultEdge> g = new simplegraph<String,DefaultEdge>(DefaultEdge.class);

什么是正确的Scala等价物?

更具体地说,我如何将DefaultEdge.class参数传递给构造函数

解决方法

正如你所说,等效的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,这种技术是值得的

现在有一些警告和警告.清单仍然被认为是实验性的.我怀疑他们太有用了,不会被放弃,但是没有保证.更多关于清单见http://scala-blogs.org/2008/10/manifests-reified-types.html

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...