在Scala中公开Java方法(带参数)?
我正试图通过Scala公开Java方法(关于原始Java方法的更多详细信息——来自) 这是原始的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
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)
}