如何将类对象从Scala传递给Java?
发布时间:2020-12-16 19:06:21 所属栏目:安全 来源:网络整理
导读:我试图使用 Scala代码中的 Java类库. (JGraphT,要准确).我需要调用的一个构造函数是 public class SimpleGraphV,E extends AbstractBaseGraphV,E implements UndirectedGraphV,E{ public SimpleGraph(Class? extends E edgeClass) {...}} 从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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |