加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何将类对象从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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读