在Scala中公开Java方法(带参数)?

在Scala中公开Java方法(带参数)?,java,scala,apache-kafka,Java,Scala,Apache Kafka,我正试图通过Scala公开Java方法(关于原始Java方法的更多详细信息——来自) 这是原始的Java方法: public void resume(Collection<TopicPartition> partitions) 另外,如何在Scala中调用(并传递参数)此方法? 谢谢。已更新 啊对。试试这个: import org.apache.kafka.clients.consumer.KafkaConsumer 导入org.apache.kafka.common.TopicP

我正试图通过Scala公开Java方法(关于原始Java方法的更多详细信息——来自)

这是原始的Java方法:

public void resume(Collection<TopicPartition> partitions)
另外,如何在Scala中调用(并传递参数)此方法?

谢谢。

已更新

啊对。试试这个:

import org.apache.kafka.clients.consumer.KafkaConsumer
导入org.apache.kafka.common.TopicPartition
导入collection.mutable.ArrayBuffer
导入collection.JavaConverters_
//初始化消费者:
val consumer=createKafkaConsumer(配置,订阅)//将此设置为val!
//在此处接受scala.collection.mutable.ArrayBuffer
def commitSync(偏移量:ArrayBuffer[TopicPartition])={
//然后将其转换为java
consumer.resume(offsets.asJava)
}
看起来ArrayBuffer需要包含
TopicPartition
实例,以便将其转换为
TopicPartition
的Java集合,以便
resume
调用工作

在Scala中,始终需要输入集合的类型参数

我假设您知道
TopicPartition
实例是什么样子的,因为这是Kafka的一部分。(请阅读下面的内容。)

为了调用
commitSync
函数,需要一个
TopicPartition
实例的
ArrayBuffer
。例如:

val主题:ArrayBuffer[TopicPartition]=ArrayBuffer(
新的TopicPartition(“sometopicname”,somePartitionNum),
新的主题分区(“someothertopic”,someOtherPartitionNum),
//等等。
)
commitSync(主题)

在哪里调用
resume
功能?你试过什么?我的错。编辑好了,看起来一切正常。你有错误吗?问题是什么?您想要实现什么?它抱怨
类型ArrayBuffer使用类型参数
(在IDE中键入时)。我试图通过scala公开Java方法,以便在scala中使用库的人可以访问Java方法。为了访问Java Kafka方法-我需要创建Scala方法,该方法将1)具有良好的签名(尚不确定哪一个是好的)2)制作工作示例-使用参数调用该Scala方法,3)确保它可以使用传递的适当参数调用底层Java Kafka方法…谢谢!这个方法的调用(签名)会是什么样子?@Joe我编辑了答案以显示应该如何调用它。谢谢!我看到
主题分区​(java.lang.String topic,int partition)
那么应该是
val topics:ArrayBuffer[TopicPartition]=('mytopicname',partition num)
模式(只是试图填补上面的空白->
/..
)?@Joe进一步澄清了答案。这是否回答了您的问题?使用
ArrayBuffer
而不是
List
的原因是什么?
import org.apache.kafka.clients.consumer.{KafkaConsumer, OffsetAndMetadata}
import org.apache.kafka.common.TopicPartition

import collection.mutable.Map
import collection.JavaConverters._

//initialise consumer:
var consumer = createKafkaConsumer(config, subscriptions)

//accept a scala.collection.mutable.Map here
def commitSync(offsets: scala.collection.mutable.ArrayBuffer) = {
    //and then convert it to a java
    consumer.resume(offsets.asJava)
}