我正在用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字段正确吗?
由于
答案 0 :(得分:4)
是的,可以在Java中使用这个scala构造函数。来自编辑器的错误消息给出了一个提示:它期望scala.Option<kafka.cluster.Broker>
作为第二个参数。
您可以按如下方式创建该scala.Option:scala.Option.apply(leader.getBroker())
此外,您不应该只将java数组列表转换为scala.Seq。相反,请查看scala.collection.JavaConversions