在Java中使用Scala - 如何将Java对象转换为Option <object>

时间:2015-08-11 18:29:51

标签: java scala

我正在用java编写,我需要使用用scala编写的外部库。特别是,我需要以下constructor

new PartitionMetadata(partitionId: Int, leader: Option[Broker], replicas: Seq[Broker], isr: Seq[Broker] = collection.this.Seq.empty[Nothing], errorCode: Short = kafka.common.ErrorMapping.NoError)

我能够在我的java代码中转换除leader : Option[Broker]Seq参数之外的所有参数:

partitionMetadata = new kafka.api.PartitionMetadata(
  partitionId, leader.getBroker(),(Seq)brokerReplicas, (Seq)brokerIsr, errorCode);

我在编辑器中收到以下错误:

'PartitionMetadata(int, scala.Option<kafka.cluster.Broker>, scala.collection.Seq<kafka.cluster.Broker>, scala.collection.Seq<kafka.cluster.Broker>, short)' in 'kafka.api.PartitionMetadata'
cannot be applied to (int, kafka.cluster.Broker, scala.collection.Seq, scala.collection.Seq, short)

是否可以在Java中使用Scala构造函数?另外,如何将Java对象(领导者)转换为选项?

最后,我转换ArrayList - &gt; Scala.collection.Seq字段正确吗?

由于

1 个答案:

答案 0 :(得分:4)

是的,可以在Java中使用这个scala构造函数。来自编辑器的错误消息给出了一个提示:它期望scala.Option<kafka.cluster.Broker>作为第二个参数。

您可以按如下方式创建该scala.Option:scala.Option.apply(leader.getBroker())

此外,您不应该只将java数组列表转换为scala.Seq。相反,请查看scala.collection.JavaConversions